| 1 | | % Heinrich Heine Universitaet Duesseldorf |
| 2 | | % (c) 2025-2026 Lehrstuhl fuer Softwaretechnik und Programmiersprachen, |
| 3 | | % This software is licenced under EPL 1.0 (http://www.eclipse.org/org/documents/epl-v10.html) |
| 4 | | |
| 5 | | :- module(test_sequent_prover,[]). |
| 6 | | |
| 7 | | :- use_module(probsrc(module_information),[module_info/2]). |
| 8 | | :- module_info(group,sequent_prover). |
| 9 | | :- module_info(description,'This module provides tests for the sequent prover.'). |
| 10 | | |
| 11 | | :- use_module(probsrc(self_check)). |
| 12 | | |
| 13 | | % % % |
| 14 | | |
| 15 | | % e.g. for simple rewriting of expression, types are ignored |
| 16 | | |
| 17 | | test_simp_rule(Rule,Hyp,NewHyp) :- |
| 18 | ? | sequent_prover_trans(simplify_hyp(Rule,_),[Hyp],[NewHyp]). |
| 19 | | |
| 20 | | test_simp_rule_with_hyps(Rule,Hyps,Hyp,NewHyp) :- |
| 21 | ? | sequent_prover_trans(simplify_hyp(Rule,_),[Hyp|Hyps],NewHyps), |
| 22 | ? | member(NewHyp,NewHyps), |
| 23 | | \+ member(NewHyp,Hyps). |
| 24 | | |
| 25 | | test_transition_new_hyp(Rule,Hyps,Goal,NewHyp) :- |
| 26 | ? | sequent_prover_trans(Rule,Hyps,Goal,NewHyps), |
| 27 | ? | member(NewHyp,NewHyps), |
| 28 | | \+ member(NewHyp,Hyps). |
| 29 | | |
| 30 | | test_transition_r(Rule,Hyps,Goal,NewGoal) :- |
| 31 | ? | sequent_prover_trans(Rule,Hyps,Goal,Hyps,NewGoal). |
| 32 | | |
| 33 | | % % % |
| 34 | | |
| 35 | | % when types / info about existing identifiers are important |
| 36 | | |
| 37 | | test_simp_rule_with_types(Rule,Hyps,Hyp,NewHyp) :- |
| 38 | ? | sequent_prover_trans_with_types(simplify_hyp(Rule,_),[Hyp|Hyps],NewHyps), |
| 39 | ? | member(NewHyp,NewHyps), |
| 40 | | \+ member(NewHyp,Hyps). |
| 41 | | |
| 42 | | test_transition_with_types_r(Rule,Hyps,Goal,NewGoal) :- |
| 43 | ? | sequent_prover_trans_with_types(Rule,Hyps,Goal,Hyps,NewGoal). |
| 44 | | |
| 45 | | test_transition_with_types_l(Rule,Hyps,Hyp,NewHyp) :- |
| 46 | ? | sequent_prover_trans_with_types(Rule,[Hyp|Hyps],NewHyps), |
| 47 | ? | member(NewHyp,NewHyps), |
| 48 | | \+ member(NewHyp,Hyps). |
| 49 | | |
| 50 | | % % % |
| 51 | | |
| 52 | | sequent_prover_axiom(Rule,Hyps,Goal) :- |
| 53 | ? | sequent_prover:sequent_prover_trans_start(Rule,state(sequent(Hyps,Goal,success),[]),state(success,_)). |
| 54 | | |
| 55 | ? | sequent_prover_trans(Rule,Hyps,NewHyps) :- sequent_prover_trans(Rule,Hyps,truth,NewHyps). |
| 56 | ? | sequent_prover_trans(Rule,Hyps,Goal,NewHyps) :- sequent_prover_trans(Rule,Hyps,Goal,NewHyps,Goal). |
| 57 | | sequent_prover_trans(Rule,Hyps,Goal,NewHyps,NewGoal) :- |
| 58 | ? | sequent_prover:sequent_prover_trans_desc(Rule,state(sequent(Hyps,Goal,success),[]),state(sequent(NewHyps,NewGoal,success),_),_) ; |
| 59 | ? | sequent_prover:sequent_prover_trans(Rule,state(sequent(Hyps,Goal,success),[]),state(sequent(NewHyps,NewGoal,success),_)). |
| 60 | | |
| 61 | ? | sequent_prover_trans_with_types(Rule,Hyps,NewHyps) :- sequent_prover_trans_with_types(Rule,Hyps,truth,NewHyps). |
| 62 | ? | sequent_prover_trans_with_types(Rule,Hyps,Goal,NewHyps) :- sequent_prover_trans_with_types(Rule,Hyps,Goal,NewHyps,Goal). |
| 63 | | sequent_prover_trans_with_types(Rule,Hyps,Goal,NewHyps,NewGoal) :- |
| 64 | ? | sequent_prover:sequent_prover_trans_start(Rule,state(sequent(Hyps,Goal,success),[]),state(sequent(NewHyps,NewGoal,success),_)) ; |
| 65 | ? | sequent_prover:sequent_prover_trans_start_desc(Rule,state(sequent(Hyps,Goal,success),[]),state(sequent(NewHyps,NewGoal,success),_),_). |
| 66 | | |
| 67 | | % % % |
| 68 | | |
| 69 | | :- assert_must_succeed(( test_simp_rule('SIMP_SPECIAL_AND_BTRUE',conjunct(truth,'$'(v)),R), R='$'(v) )). |
| 70 | | :- assert_must_succeed((test_simp_rule('SIMP_SPECIAL_AND_BTRUE',conjunct(truth,conjunct('$'(v),truth)),R), |
| 71 | | R=conjunct('$'(v),truth) )). |
| 72 | | :- assert_must_succeed(( test_simp_rule('SIMP_SPECIAL_AND_BFALSE',conjunct(conjunct('$'(v),'$'(v)),falsity),R), |
| 73 | | R=falsity)). |
| 74 | | :- assert_must_succeed(( test_simp_rule('SIMP_MULTI_AND',conjunct(conjunct('$'(v),'$'(w)),'$'(w)),R), |
| 75 | | R=conjunct('$'(v),'$'(w)) )). |
| 76 | | :- assert_must_succeed(( test_simp_rule('SIMP_MULTI_AND',conjunct('$'(v),'$'(v)),R), R='$'(v) )). |
| 77 | | :- assert_must_succeed(( test_simp_rule('SIMP_MULTI_AND',conjunct(conjunct(conjunct('$'(v),'$'(u)),'$'(u)),'$'(u)),R), |
| 78 | | R=conjunct('$'(v),'$'(u)) )). |
| 79 | | :- assert_must_succeed(( test_simp_rule('SIMP_MULTI_AND_NOT',conjunct(conjunct(negation('$'(v)),'$'(w)),'$'(v)),R), R=falsity )). |
| 80 | | :- assert_must_succeed(( test_simp_rule('SIMP_MULTI_AND_NOT',conjunct(negation(equal('$'(w),'$'(v))),equal('$'(v),'$'(w))),R), |
| 81 | | R=falsity )). |
| 82 | | :- assert_must_succeed(( test_simp_rule('SIMP_SPECIAL_OR_BTRUE',disjunct(disjunct('$'(w),truth),'$'(v)),R), R=truth )). |
| 83 | | :- assert_must_succeed(( test_simp_rule('SIMP_SPECIAL_OR_BFALSE',disjunct(disjunct(falsity,'$'(v)),falsity),R), |
| 84 | | R=disjunct('$'(v),falsity) )). |
| 85 | | :- assert_must_succeed(( test_simp_rule('SIMP_MULTI_OR',disjunct('$'(v),'$'(v)),R), R='$'(v))). |
| 86 | | :- assert_must_succeed(( test_simp_rule('SIMP_MULTI_OR_NOT',disjunct('$'(v),negation('$'(v))),R), R=truth)). |
| 87 | | :- assert_must_succeed(( test_simp_rule('Evaluate tautology',implication(not_equal('$'(w),'$'(v)),truth),R), |
| 88 | | R=truth )). % SIMP_SPECIAL_IMP_BTRUE_R |
| 89 | | :- assert_must_succeed(( test_simp_rule('SIMP_SPECIAL_IMP_BTRUE_L',implication(truth,not_equal('$'(w),'$'(v))),R), |
| 90 | | R=not_equal('$'(w),'$'(v)) )). |
| 91 | | :- assert_must_succeed(( test_simp_rule('Evaluate tautology',implication(equal('$'(v),'$'(w)),equal('$'(w),'$'(v))),R), |
| 92 | | R=truth )). % SIMP_MULTI_IMP |
| 93 | | :- assert_must_succeed(( test_simp_rule('Propagate negation',negation(less_equal('$'(v),'$'(w))),R), |
| 94 | | R=greater('$'(v),'$'(w)) )). % SIMP_NOT_LE |
| 95 | | :- assert_must_succeed(( test_simp_rule('DISTRI_NOT_AND',negation(conjunct('$'(v),'$'(w))),R), |
| 96 | | R==disjunct(negation('$'(v)),negation('$'(w))))). |
| 97 | | :- assert_must_succeed(( test_simp_rule('DISTRI_NOT_AND',negation(conjunct(conjunct('$'(u),'$'(v)),'$'(w))),R), |
| 98 | | R==disjunct(disjunct(negation('$'(u)),negation('$'(v))),negation('$'(w))))). |
| 99 | | :- assert_must_succeed(( test_simp_rule('DERIV_NOT_IMP',negation(implication('$'(u),'$'(v))),R), |
| 100 | | R==conjunct('$'(u),negation('$'(v))))). |
| 101 | | :- assert_must_succeed(( test_simp_rule('SIMP_SPECIAL_NOT_EQUAL_FALSE',negation(equal(boolean_false,'$'(e))),R), |
| 102 | | R=equal('$'(e),boolean_true))). % SIMP_SPECIAL_NOT_EQUAL_FALSE_L |
| 103 | | :- assert_must_succeed(( test_simp_rule('SIMP_SPECIAL_NOT_EQUAL_TRUE',negation(equal('$'(e),boolean_true)),R), |
| 104 | | R=equal('$'(e),boolean_false))). % SIMP_SPECIAL_NOT_EQUAL_TRUE_R |
| 105 | | :- assert_must_succeed(( test_simp_rule('SIMP_FORALL_AND', |
| 106 | | forall(['$'(x)],member('$'(x),natural1_set),conjunct(greater('$'(x),0),not_equal('$'(x),'$'(y)))),R), |
| 107 | | R=conjunct(forall(['$'(x)],member('$'(x),natural1_set),greater('$'(x),0)),forall(['$'(x)],member('$'(x),natural1_set),not_equal('$'(x),'$'(y)))))). |
| 108 | | :- assert_must_succeed(( test_simp_rule('SIMP_FORALL_AND',forall(['$'(x),'$'(y)],'$'(p),conjunct(conjunct('$'(v),'$'(w)),'$'(u))),R), |
| 109 | | R=conjunct(conjunct(forall(['$'(x),'$'(y)],'$'(p),'$'(v)),forall(['$'(x),'$'(y)],'$'(p),'$'(w))),forall(['$'(x),'$'(y)],'$'(p),'$'(u))) )). |
| 110 | | :- assert_must_succeed(( test_simp_rule('SIMP_EXISTS_OR',exists(['$'(x)],disjunct('$'(p),'$'(q))),R), |
| 111 | | R=disjunct(exists(['$'(x)],'$'(p)),exists(['$'(x)],'$'(q))) )). |
| 112 | | :- assert_must_succeed(( test_simp_rule('SIMP_FORALL',forall(['$'(x),'$'(y)],greater('$'(x),0),'$'(q)),R), |
| 113 | | R=forall(['$'(x)],greater('$'(x),0),'$'(q)) )). |
| 114 | | :- assert_must_succeed(( test_simp_rule('SIMP_FORALL',forall(['$'(y),'$'(z),'$'(x)],greater('$'(x),0),'$'(q)),R), |
| 115 | | R=forall(['$'(x)],greater('$'(x),0),'$'(q)) )). |
| 116 | | :- assert_must_succeed(( test_simp_rule('SIMP_FORALL',forall(['$'(y),'$'(z),'$'(x)],disjunct(greater('$'(x),0),greater('$'(y),0)),'$'(q)),R), |
| 117 | | R=forall(['$'(y),'$'(x)],disjunct(greater('$'(x),0),greater('$'(y),0)),'$'(q)) )). |
| 118 | | :- assert_must_succeed(( test_simp_rule('SIMP_EQUAL_MAPSTO',equal(couple('$'(e),'$'(f)),couple('$'(g),'$'(h))),R), |
| 119 | | R=conjunct(equal('$'(e),'$'(g)),equal('$'(f),'$'(h))) )). |
| 120 | | :- assert_must_succeed(( test_simp_rule('SIMP_COMPSET_IN',event_b_comprehension_set(['$'(x)],'$'(x),member('$'(x),'$'(s))),R),R='$'(s) )). |
| 121 | | :- assert_must_succeed(( test_simp_rule('SIMP_COMPSET_IN', |
| 122 | | event_b_comprehension_set(['$'(x),'$'(y)],couple('$'(x),'$'(y)),member(couple('$'(x),'$'(y)),'$'(s))),R),R='$'(s) )). |
| 123 | | :- assert_must_fail( test_simp_rule('SIMP_COMPSET_IN', |
| 124 | | event_b_comprehension_set(['$'(x)],'$'(x),member('$'(x),set_extension(['$'(w),'$'(x),'$'(y)]))),_) ). |
| 125 | | :- assert_must_succeed(( test_simp_rule('SIMP_TYPE_SUBSETEQ',subset('$'(s),bool_set),R),R=truth )). |
| 126 | | :- assert_must_succeed((test_simp_rule('Evaluate tautology',subset(set_extension(['$'(red),'$'(blu)]),set_extension(['$'(blu),'$'(red)])),R), |
| 127 | | R=truth )). % SIMP_MULTI_SUBSETEQ |
| 128 | | :- assert_must_succeed(( test_simp_rule('DERIV_SUBSETEQ_BUNION',subset(union(union('$'(r),'$'(b)),'$'(p)),'$'(c)),R), |
| 129 | | R=conjunct(conjunct(subset('$'(r),'$'(c)),subset('$'(b),'$'(c))),subset('$'(p),'$'(c))) )). |
| 130 | | :- assert_must_succeed(( test_simp_rule('DERIV_SUBSETEQ_BINTER',subset('$'(c),intersection('$'(a),'$'(b))),R), |
| 131 | | R=conjunct(subset('$'(c),'$'(a)),subset('$'(c),'$'(b))) )). |
| 132 | | :- assert_must_succeed(( test_simp_rule('SIMP_MULTI_SETENUM',set_extension(['$'(a),'$'(a),'$'(b),'$'(b)]),R), |
| 133 | | R=set_extension(['$'(a),'$'(b)]) )). |
| 134 | | :- assert_must_succeed(( test_simp_rule('SIMP_SPECIAL_BINTER',intersection('$'(a),intersection(empty_set,'$'(w))),R), R=empty_set)). |
| 135 | | :- assert_must_succeed(( test_simp_rule('SIMP_TYPE_BINTER',intersection('$'(a),intersection('INTEGER','$'(b))),R), |
| 136 | | R=intersection('$'(a),'$'(b)) )). |
| 137 | | :- assert_must_succeed(( test_simp_rule('SIMP_TYPE_BUNION',union('$'(a),union(pow_subset(bool_set),'$'(b))),R), |
| 138 | | R=pow_subset(bool_set))). |
| 139 | | :- assert_must_succeed(( test_simp_rule('SIMP_TYPE_SETMINUS',set_subtraction('$'(s),cartesian_product(bool_set,bool_set)),R), |
| 140 | | R=empty_set)). |
| 141 | | :- assert_must_succeed(( test_simp_rule('SIMP_TYPE_SETMINUS_SETMINUS', |
| 142 | | set_subtraction(bool_set,set_subtraction(bool_set,'$'(s))),R), R='$'(s))). |
| 143 | | :- assert_must_succeed(( test_simp_rule('SIMP_SPECIAL_CPROD',cartesian_product('$'(s),empty_set),R), R=empty_set )). |
| 144 | | :- assert_must_succeed(( test_simp_rule('SIMP_SPECIAL_CPROD',cartesian_product(cartesian_product('$'(t),'$'(s)),empty_set),R), |
| 145 | | R=empty_set)). % SIMP_SPECIAL_CPROD_R, SIMP_SPECIAL_CPROD_L |
| 146 | | :- assert_must_succeed(( test_simp_rule('SIMP_SPECIAL_OVERL',overwrite(empty_set,'$'(t)),R), R='$'(t) )). |
| 147 | | :- assert_must_succeed(( test_simp_rule('SIMP_SPECIAL_OVERL',overwrite(overwrite('$'(t),'$'(s)),empty_set),R), |
| 148 | | R=overwrite('$'(t),'$'(s)) )). |
| 149 | | :- assert_must_succeed(( test_simp_rule('SIMP_SPECIAL_OVERL',overwrite(overwrite(empty_set,'$'(t)),'$'(s)),R), |
| 150 | | R=overwrite('$'(t),'$'(s)) )). |
| 151 | | :- assert_must_succeed(( test_simp_rule('SIMP_FINITE_BUNION',finite(union('$'(s),'$'(t))),R), R=conjunct(finite('$'(s)),finite('$'(t))) )). |
| 152 | | :- assert_must_succeed(( test_simp_rule('SIMP_FINITE_CONVERSE',finite(reverse(set_extension([couple(1,2)]))),R), |
| 153 | | R=finite(set_extension([couple(1,2)])) )). |
| 154 | | :- assert_must_succeed(( test_simp_rule('SIMP_FINITE_ID_DOMRES',finite(domain_restriction('$'(e),event_b_identity)),R), |
| 155 | | R=finite('$'(e)) )). |
| 156 | | :- assert_must_succeed(( test_simp_rule('DEF_OR',disjunct(disjunct(disjunct('$'(q),'$'(s)),'$'(r)),'$'(t)),R), |
| 157 | | R=implication(negation('$'(q)),disjunct(disjunct('$'(s),'$'(r)),'$'(t))) )). |
| 158 | | :- assert_must_succeed(( test_simp_rule('SIMP_FINITE_NATURAL',disjunct('$'(p),finite(natural_set)),R), |
| 159 | | R=disjunct('$'(p),falsity))). % subterm |
| 160 | | :- assert_must_succeed(( test_simp_rule('DEF_IN_MAPSTO',member(couple('$'(a),'$'(b)),cartesian_product('$'(n),'$'(m))),R), |
| 161 | | R=conjunct(member('$'(a),'$'(n)),member('$'(b),'$'(m))) )). |
| 162 | | :- assert_must_succeed(( test_simp_rule('DEF_IN_MAPSTO', |
| 163 | | member(couple(couple('$'(a),'$'(b)),'$'(c)),cartesian_product(cartesian_product('$'(n),'$'(m)),'$'(o))),R), |
| 164 | | R=conjunct(member(couple('$'(a),'$'(b)),cartesian_product('$'(n),'$'(m))),member('$'(c),'$'(o))) )). |
| 165 | | :- assert_must_succeed(( test_simp_rule('DEF_IN_POW',member(set_extension(['$'(a)]),pow_subset(natural1_set)),R), |
| 166 | | R=subset(set_extension(['$'(a)]),natural1_set) )). |
| 167 | | :- assert_must_succeed(( test_simp_rule('DEF_IN_POW1',member(set_extension(['$'(a)]),pow1_subset(natural1_set)),R), |
| 168 | | R=conjunct(member(set_extension(['$'(a)]),pow_subset(natural1_set)),not_equal(natural1_set,empty_set)) )). |
| 169 | | :- assert_must_succeed(( test_simp_rule('DEF_SUBSETEQ',subset('$'(s),'$'(t)),R), |
| 170 | | R=forall(['$'(x)],member('$'(x),'$'(s)),member('$'(x),'$'(t))) )). |
| 171 | | :- assert_must_succeed(( test_simp_rule('DEF_SUBSETEQ',subset(set_extension(['$'(x)]),'$'(y)),R), |
| 172 | | R=forall(['$'(z)],member('$'(z),set_extension(['$'(x)])),member('$'(z),'$'(y))) )). % new identifier |
| 173 | | :- assert_must_succeed(( test_simp_rule('DEF_IN_BUNION',member('$'(e),union('$'(x),'$'(y))),R), |
| 174 | | R=disjunct(member('$'(e),'$'(x)),member('$'(e),'$'(y))) )). |
| 175 | | :- assert_must_succeed(( test_simp_rule('DEF_IN_BINTER',member('$'(e),intersection('$'(x),intersection('$'(y),'$'(z)))),R), |
| 176 | | R=conjunct(member('$'(e),'$'(x)),conjunct(member('$'(e),'$'(y)),member('$'(e),'$'(z)))) )). |
| 177 | | :- assert_must_succeed(( test_simp_rule('DEF_IN_SETMINUS',member('$'(e),set_subtraction(set_extension(['$'(x)]),'$'(y))),R), |
| 178 | | R=conjunct(member('$'(e),set_extension(['$'(x)])),negation(member('$'(e),'$'(y)))) )). |
| 179 | | :- assert_must_succeed(( test_simp_rule('DEF_IN_SETENUM',member('$'(e),set_extension([1,2,3])),R), |
| 180 | | R=disjunct(disjunct(equal('$'(e),1),equal('$'(e),2)),equal('$'(e),3)) )). |
| 181 | | :- assert_must_succeed(( test_simp_rule('DEF_IN_KUNION',member(22,general_union('$'(s))),R), |
| 182 | | R=exists(['$'(x)],conjunct(member('$'(x),'$'(s)),member(22,'$'(x)))) )). |
| 183 | | :- assert_must_succeed(( test_simp_rule('DEF_IN_KUNION',member(23,general_union('$'(x))),R), |
| 184 | | R=exists(['$'(y)],conjunct(member('$'(y),'$'(x)),member(23,'$'(y)))) )). |
| 185 | | :- assert_must_succeed(( test_simp_rule('DEF_SPECIAL_NOT_EQUAL',not_equal(empty_set,'$'(s)),R),R=exists([X],member(X,'$'(s))) )). |
| 186 | | :- assert_must_succeed(( test_simp_rule('DEF_SPECIAL_NOT_EQUAL',negation(equal('$'(s),empty_set)),R),R=exists([X],member(X,'$'(s))) )). |
| 187 | | :- assert_must_succeed(( test_simp_rule('DEF_SPECIAL_NOT_EQUAL',negation(subset('$'(s),empty_set)),R),R=exists([X],member(X,'$'(s))) )). |
| 188 | | :- assert_must_succeed(( test_simp_rule('DERIV_SUBSETEQ_SETMINUS_L',subset(set_subtraction('$'(a),'$'(s)),'$'(t)),R), |
| 189 | | R=subset('$'(a),union('$'(s),'$'(t))) )). |
| 190 | | :- assert_must_succeed(( test_simp_rule('SIMP_DOM_SETENUM',domain(set_extension([couple(1,2),couple(2,3)])),R), |
| 191 | | R=set_extension([1,2]) )). |
| 192 | | :- assert_must_succeed(( test_simp_rule('SIMP_DOM_SETENUM',domain(set_extension([couple(1,2),couple(1,3)])),R), |
| 193 | | R=set_extension([1]) )). |
| 194 | | :- assert_must_succeed(( test_simp_rule('SIMP_TYPE_OVERL_CPROD',overwrite(overwrite(overwrite('$'(r),'$'(s)),bool_set),'$'(t)),R), |
| 195 | | R=overwrite(bool_set,'$'(t)) )). |
| 196 | | :- assert_must_succeed(( test_simp_rule('SIMP_TYPE_OVERL_CPROD',overwrite(overwrite(overwrite('$'(t),'$'(s)),'$'(r)),bool_set),R), |
| 197 | | R=bool_set )). |
| 198 | | :- assert_must_succeed(( test_simp_rule('SIMP_TYPE_OVERL_CPROD',overwrite(overwrite(overwrite(bool_set,'$'(s)),bool_set),'$'(r)),R), |
| 199 | | R=overwrite(bool_set,'$'(r)) )). |
| 200 | | :- assert_must_succeed(( test_simp_rule('SIMP_DPROD_CPROD', |
| 201 | | direct_product(cartesian_product('$'(a),'$'(b)),cartesian_product('$'(c),'$'(d))),R), |
| 202 | | R=cartesian_product(intersection('$'(a),'$'(c)),cartesian_product('$'(b),'$'(d))) )). |
| 203 | | :- assert_must_succeed(( test_simp_rule('SIMP_PPROD_CPROD', |
| 204 | | parallel_product(cartesian_product('$'(s),'$'(t)),cartesian_product('$'(u),'$'(v))),R), |
| 205 | | R=cartesian_product(cartesian_product('$'(s),'$'(u)),cartesian_product('$'(t),'$'(v))) )). |
| 206 | | :- assert_must_succeed(( test_simp_rule('SIMP_MULTI_RELIMAGE_CPROD_SING', |
| 207 | | image(cartesian_product(set_extension(['$'(e)]),'$'(s)),set_extension(['$'(e)])),R),R='$'(s) )). |
| 208 | | :- assert_must_succeed(( test_simp_rule('SIMP_CONVERSE_SETENUM', |
| 209 | | reverse(set_extension([couple('$'(a),'$'(b)),couple('$'(c),'$'(d))])),R), |
| 210 | | R=set_extension([couple('$'(b),'$'(a)),couple('$'(d),'$'(c))]) )). |
| 211 | | :- assert_must_succeed(( test_simp_rule('SIMP_SPECIAL_REL_R',partial_function('$'(s),empty_set),R),R=set_extension([empty_set]) )). |
| 212 | | :- assert_must_succeed(( test_simp_rule('SIMP_SPECIAL_REL_R',surjection_relation('$'(s),empty_set),R), |
| 213 | | R=set_extension([empty_set]) )). |
| 214 | | :- assert_must_fail( test_simp_rule('SIMP_SPECIAL_REL_R',total_relation('$'(s),empty_set),_) ). |
| 215 | | :- assert_must_succeed(( test_simp_rule('SIMP_DOM_LAMBDA', |
| 216 | | domain(event_b_comprehension_set(['$'(x),'$'(y)],couple(add('$'(x),'$'(x)),'$'(y)),member(couple('$'(x),'$'(y)),'$'(p)))),R), |
| 217 | | R=event_b_comprehension_set(['$'(x),'$'(y)],add('$'(x),'$'(x)),member(couple('$'(x),'$'(y)),'$'(p))) )). |
| 218 | | :- assert_must_fail( test_simp_rule('SIMP_DOM_LAMBDA', |
| 219 | | domain(event_b_comprehension_set(['$'(x),'$'(y)],add('$'(x),'$'(x)),member(couple('$'(x),'$'(y)),'$'(p)))),_) ). |
| 220 | | :- assert_must_succeed(( test_simp_rule('SIMP_MULTI_FUNIMAGE_SETENUM_LL',function(set_extension([couple('$'(a),1)]),'$'(x)),R), |
| 221 | | R=1)). |
| 222 | | :- assert_must_succeed(( test_simp_rule('SIMP_MULTI_FUNIMAGE_SETENUM_LL', |
| 223 | | function(set_extension([couple(1,1),couple(2,1),couple(3,1)]),1),R),R=1 )). |
| 224 | | :- assert_must_fail( test_simp_rule('SIMP_MULTI_FUNIMAGE_SETENUM_LL', |
| 225 | | function(set_extension([couple(1,1),couple(2,2),couple(3,1)]),1),_) ). |
| 226 | | :- assert_must_succeed(( test_simp_rule('SIMP_MULTI_FUNIMAGE_SETENUM_LR', |
| 227 | | function(set_extension([couple(1,1),couple(2,3),couple(4,5)]),2),R),R=3 )). |
| 228 | | :- assert_must_succeed(( test_simp_rule('SIMP_MULTI_FUNIMAGE_SETENUM_LR', |
| 229 | | function(set_extension([couple(add('$'(x),1),'$'(y))]),add(1,'$'(x))),R),R='$'(y) )). |
| 230 | | :- assert_must_succeed(( test_simp_rule('SIMP_MULTI_FUNIMAGE_OVERL_SETENUM', |
| 231 | | function(overwrite(overwrite('$'(r),'$'(s)),set_extension([couple('$'(x),'$'(y))])),'$'(x)),R),R='$'(y) )). |
| 232 | | :- assert_must_succeed(( test_simp_rule('SIMP_MULTI_FUNIMAGE_BUNION_SETENUM', |
| 233 | | function(union(union('$'(r),'$'(s)),set_extension([couple(1,2),couple(2,'$'(x))])),2),R),R='$'(x) )). |
| 234 | | :- assert_must_succeed(( test_simp_rule('SIMP_MULTI_FUNIMAGE_BUNION_SETENUM', |
| 235 | | function(union(set_extension([couple(1,2),couple(2,'$'(x))]),union('$'(r),'$'(s))),2),R),R='$'(x) )). |
| 236 | | :- assert_must_succeed(( test_simp_rule('SIMP_FUNIMAGE_FUNIMAGE_CONVERSE_SETENUM', |
| 237 | | function(set_extension([couple(1,2),couple(2,3),couple(2,4)]),function(set_extension([couple(4,2),couple(3,2),couple(2,1)]),'$'(x))),R), |
| 238 | | R='$'(x) )). |
| 239 | | :- assert_must_succeed(( test_simp_rule('DEF_EQUAL_FUNIMAGE',equal(function('$'(f),'$'(x)),'$'(y)),R), |
| 240 | | R=member(couple('$'(x),'$'(y)),'$'(f)) )). |
| 241 | | :- assert_must_succeed(( test_simp_rule('DEF_EQUAL_FUNIMAGE',equal(function('$'(f),couple('$'(x),'$'(z))),'$'(y)),R), |
| 242 | | R=member(couple(couple('$'(x),'$'(z)),'$'(y)),'$'(f)) )). |
| 243 | | :- assert_must_succeed(( test_simp_rule('DEF_BCOMP',ring(ring(ring('$'(a),'$'(b)),'$'(c)),'$'(d)),R), |
| 244 | | R=composition(composition(composition('$'(d),'$'(c)),'$'(b)),'$'(a)) )). |
| 245 | | :- assert_must_succeed(( test_simp_rule('DERIV_FCOMP_SING', |
| 246 | | composition(set_extension([couple('$'(e),'$'(f))]),set_extension([couple('$'(f),'$'(g))])),R), R=set_extension([couple('$'(e),'$'(g))]) )). |
| 247 | | :- assert_must_succeed(( test_simp_rule('DEF_IN_DOM',member('$'(a),domain('$'(r))),R), |
| 248 | | R=exists(['$'(x)],member(couple('$'(a),'$'(x)),'$'(r))) )). |
| 249 | | :- assert_must_succeed(( test_simp_rule('DEF_IN_DOM',member('$'(x),domain('$'(r))),R), |
| 250 | | R=exists(['$'(y)],member(couple('$'(x),'$'(y)),'$'(r))) )). |
| 251 | | :- assert_must_succeed(( test_simp_rule('DEF_IN_DOM',member('$'(a),domain(set_extension([couple(1,'$'(x))]))),R), |
| 252 | | R=exists(['$'(y)],member(couple('$'(a),'$'(y)),set_extension([couple(1,'$'(x))]))) )). |
| 253 | | :- assert_must_succeed(( test_simp_rule('DEF_IN_FCOMP', |
| 254 | | member(couple('$'(a),'$'(b)),composition(event_b_identity,set_extension([couple(0,1)]))),R), |
| 255 | | R=exists(['$'(x)],conjunct(member(couple('$'(a),'$'(x)),event_b_identity),member(couple('$'(x),'$'(b)),set_extension([couple(0,1)])))))). |
| 256 | | :- assert_must_succeed(( test_simp_rule('DEF_IN_FCOMP',member(couple('$'(a),'$'(x)),composition(composition('$'(r),'$'(s)),'$'(t))),R), |
| 257 | | R=exists(['$'(y1),'$'(y2)],conjunct(conjunct(member(couple('$'(a),'$'(y1)),'$'(r)), |
| 258 | | member(couple('$'(y1),'$'(y2)),'$'(s))),member(couple('$'(y2),'$'(x)),'$'(t)))) )). |
| 259 | | :- assert_must_succeed(( test_simp_rule('DERIV_MULTI_IN_BUNION',member('$'(r),union('$'(a),set_extension(['$'(r)]))),R), R=truth )). |
| 260 | | :- assert_must_succeed(( test_simp_rule('SIMP_SETMINUS_EQUAL_EMPTY',equal(empty_set,set_subtraction('$'(r),'$'(a))),R), |
| 261 | | R=subset('$'(r),'$'(a)) )). |
| 262 | | :- assert_must_succeed(( test_simp_rule('SIMP_SETMINUS_EQUAL_EMPTY',equal(set_subtraction('$'(r),'$'(a)),empty_set),R), |
| 263 | | R=subset('$'(r),'$'(a)) )). |
| 264 | | :- assert_must_succeed(( test_simp_rule('SIMP_SETMINUS_EQUAL_EMPTY',subset(set_subtraction('$'(r),'$'(a)),empty_set),R), |
| 265 | | R=subset('$'(r),'$'(a)) )). |
| 266 | | :- assert_must_succeed(( test_simp_rule('SIMP_FCOMP_EQUAL_EMPTY',equal(empty_set,composition('$'(r),'$'(a))),R), |
| 267 | | R=equal(intersection(range('$'(r)),domain('$'(a))),empty_set) )). |
| 268 | | :- assert_must_succeed(( test_simp_rule('SIMP_OVERL_EQUAL_EMPTY',equal(empty_set,overwrite(overwrite('$'(r),'$'(a)),'$'(b))),R), |
| 269 | | R=conjunct(conjunct(equal('$'(r),empty_set),equal('$'(a),empty_set)),equal('$'(b),empty_set)) )). |
| 270 | | :- assert_must_succeed(( test_simp_rule('SIMP_MIN_BUNION_SING',min(union('$'(s),set_extension([min('$'(t))]))),R), |
| 271 | | R=min(union('$'(s),'$'(t))) )). |
| 272 | | :- assert_must_succeed(( test_simp_rule('SIMP_LIT_MIN',min(set_extension(['$'(a),'$'(t),3,0,1])),R),R=min(set_extension(['$'(a),'$'(t),0])))). |
| 273 | | :- assert_must_succeed(( test_simp_rule('SIMP_LIT_CARD_UPTO',card(interval(1,2)),R), R=2 )). |
| 274 | | :- assert_must_fail( test_simp_rule('SIMP_LIT_CARD_UPTO',card(interval(2,'$'(drei))),_) ). |
| 275 | | :- assert_must_succeed(( test_simp_rule('SIMP_SPECIAL_PROD_0',multiplication(multiplication('$'(i),0),'$'(e)),R), R=0 )). |
| 276 | | :- assert_must_succeed(( test_simp_rule('SIMP_SPECIAL_PROD_1',multiplication(multiplication('$'(i),1),'$'(e)),R), R=multiplication('$'(i),'$'(e)) )). |
| 277 | | :- assert_must_succeed(( test_simp_rule('SIMP_SPECIAL_PROD_MINUS_ODD', |
| 278 | | multiplication(multiplication(unary_minus('$'(i)),1),'$'(e)),R), R=unary_minus(multiplication(multiplication('$'(i),1),'$'(e))) )). |
| 279 | | :- assert_must_succeed(( test_simp_rule('SIMP_SPECIAL_PROD_MINUS_ODD', |
| 280 | | multiplication(multiplication('$'(i),-1),'$'(e)),R), R=unary_minus(multiplication(multiplication('$'(i),1),'$'(e))) )). |
| 281 | | :- assert_must_succeed(( test_simp_rule('SIMP_SPECIAL_PROD_MINUS_EVEN', |
| 282 | | multiplication(multiplication(unary_minus('$'(i)),-1),'$'(e)),R), R=multiplication(multiplication('$'(i),1),'$'(e)) )). |
| 283 | | :- assert_must_succeed(( test_simp_rule('SIMP_LIT_MINUS',unary_minus(1),R), R= -1 )). |
| 284 | | :- assert_must_fail( test_simp_rule('SIMP_LIT_MINUS',unary_minus('$'(a)),_) ). |
| 285 | | :- assert_must_succeed(( test_simp_rule('SIMP_LIT_GT',greater(1,1),R), R=falsity )). |
| 286 | | :- assert_must_succeed(( test_simp_rule('SIMP_LIT_GT',greater(2,1),R), R=truth )). |
| 287 | | :- assert_must_succeed(( test_simp_rule('SIMP_DIV_MINUS',div(-12,unary_minus('$'(x))),R), R=div(12,'$'(x)) )). |
| 288 | | :- assert_must_succeed(( test_simp_rule('SIMP_MULTI_LT',less(0,multiplication(1000000,0)),R), R=falsity )). |
| 289 | | :- assert_must_succeed(( test_simp_rule('Evaluate tautology',less_equal(0,multiplication(1000,0)),R), R=truth )). % SIMP_MULTI_LE |
| 290 | | :- assert_must_succeed(( test_simp_rule('SIMP_MULTI_DIV_PROD', |
| 291 | | equal(1,div(multiplication(multiplication('$'(y),'$'(e)),'$'(x)),'$'(e))),R), R=equal(1,multiplication('$'(y),'$'(x))) )). |
| 292 | | :- assert_must_succeed(( test_simp_rule('Evaluate tautology',member(0,'NATURAL'),R), R=truth )). % SIMP_LIT_IN_NATURAL |
| 293 | | :- assert_must_fail( test_simp_rule('Evaluate tautology',member(-1,'NATURAL'),_) ). |
| 294 | | :- assert_must_succeed(( test_simp_rule('Evaluate tautology',member(1,'NATURAL1'),R), R=truth )). % SIMP_LIT_IN_NATURAL1 |
| 295 | | :- assert_must_fail( test_simp_rule('Evaluate tautology',member(0,'NATURAL1'),_) ). |
| 296 | | :- assert_must_succeed(( test_simp_rule('SIMP_LIT_UPTO',interval(1,0),R),R=empty_set )). |
| 297 | | :- assert_must_fail( test_simp_rule('SIMP_LIT_UPTO',interval(0,0),_) ). |
| 298 | | :- assert_must_succeed(( test_simp_rule('SIMP_LIT_IN_MINUS_NATURAL',member(unary_minus(1),natural_set),R),R=falsity )). |
| 299 | | :- assert_must_succeed(( test_simp_rule('SIMP_LIT_IN_MINUS_NATURAL',member(-1,natural_set),R),R=falsity )). |
| 300 | | :- assert_must_succeed(( test_simp_rule('SIMP_MINUS_MINUS',unary_minus(unary_minus('$'(e))),R),R='$'(e) )). |
| 301 | | :- assert_must_succeed(( test_simp_rule('SIMP_MINUS_MINUS',unary_minus(-13),R),R=13 )). |
| 302 | | :- assert_must_succeed(( test_simp_rule('SIMP_TYPE_FCOMP_R',composition('$'(r),cartesian_product(integer_set,bool_set)),R), |
| 303 | | R=cartesian_product(domain('$'(r)),bool_set) )). |
| 304 | | :- assert_must_fail( test_simp_rule('SIMP_TYPE_FCOMP_R',composition('$'(r),pow_subset(integer_set,bool_set)),_) ). |
| 305 | | :- assert_must_succeed(( test_simp_rule('SIMP_TYPE_FCOMP_R',composition('$'(r),cartesian_product(integer_set,bool_set)),R), |
| 306 | | R=cartesian_product(domain('$'(r)),bool_set) )). |
| 307 | | :- assert_must_fail( test_simp_rule('SIMP_TYPE_FCOMP_R',composition('$'(r),pow_subset(integer_set,bool_set)),_) ). |
| 308 | | :- assert_must_succeed(( test_simp_rule('SIMP_TYPE_DOM',domain(cartesian_product(integer_set,bool_set)),R), |
| 309 | | R=integer_set )). |
| 310 | | :- assert_must_succeed(( test_simp_rule('SIMP_TYPE_DOM',domain(cartesian_product(cartesian_product(integer_set,bool_set),bool_set)),R), |
| 311 | | R=cartesian_product(integer_set,bool_set) )). |
| 312 | | :- assert_must_succeed(( test_simp_rule('SIMP_TYPE_RAN',range(cartesian_product(integer_set,bool_set)),R), |
| 313 | | R=bool_set )). |
| 314 | | :- assert_must_succeed(( test_simp_rule('SIMP_COMPSET_EQUAL', |
| 315 | | event_b_comprehension_set(['$'(x),'$'(y)],couple('$'(x),'$'(y)),conjunct(member('$'(y),natural_set),equal('$'(x),1))),R), |
| 316 | | R=event_b_comprehension_set(['$'(y)],couple(1,'$'(y)),member('$'(y),natural_set)) )). |
| 317 | | :- assert_must_succeed(( test_simp_rule('SIMP_COMPSET_EQUAL', |
| 318 | | event_b_comprehension_set(['$'(x),'$'(y)],couple('$'(x),'$'(y)),conjunct(member('$'(x),natural_set),equal('$'(y),1))),R), |
| 319 | | R=event_b_comprehension_set(['$'(x)],couple('$'(x),1),member('$'(x),natural_set)) )). |
| 320 | | :- assert_must_succeed(( test_simp_rule('SIMP_COMPSET_EQUAL', |
| 321 | | event_b_comprehension_set(['$'(x),'$'(y),'$'(z)],couple(couple('$'(x),'$'(z)),'$'(y)), |
| 322 | | conjunct(member('$'(y),natural_set),equal(couple('$'(x),'$'(z)),'$'(e)))),R), |
| 323 | | R=event_b_comprehension_set(['$'(y)],couple('$'(e),'$'(y)),member('$'(y),natural_set)) )). |
| 324 | | :- assert_must_succeed(( test_simp_rule('SIMP_IN_COMPSET', |
| 325 | | member('$'(f),event_b_comprehension_set(['$'(x),'$'(y)],add('$'(x),'$'(y)), |
| 326 | | conjunct(member('$'(x),natural_set),member('$'(y),natural_set)))),R), |
| 327 | | R=exists(['$'(x),'$'(y)],conjunct(conjunct(member('$'(x),natural_set),member('$'(y),natural_set)),equal(add('$'(x),'$'(y)),'$'(f)))) )). |
| 328 | | :- assert_must_fail( test_simp_rule('SIMP_IN_COMPSET_ONEPOINT', |
| 329 | | member('$'(a),event_b_comprehension_set(['$'(x)],couple('$'(x),add('$'(x),1)),member('$'(x),set_extension([3,12])))),_) ). |
| 330 | | :- assert_must_succeed(( test_simp_rule('SIMP_IN_COMPSET_ONEPOINT', |
| 331 | | member('$'(a),event_b_comprehension_set(['$'(x)],'$'(x),member('$'(x),set_extension([3,12])))),R), |
| 332 | | R=member('$'(a),set_extension([3,12])) )). |
| 333 | | :- assert_must_succeed(( test_simp_rule('SIMP_IN_COMPSET_ONEPOINT', |
| 334 | | member(couple('$'(a),'$'(b)),event_b_comprehension_set(['$'(x),'$'(y)],couple('$'(x),'$'(y)), |
| 335 | | conjunct(member('$'(x),natural_set),member('$'(y),natural_set)))),R), |
| 336 | | R=conjunct(member('$'(a),natural_set),member('$'(b),natural_set)) )). |
| 337 | | :- assert_must_fail( test_simp_rule('SIMP_IN_COMPSET_ONEPOINT',member('$'(a), |
| 338 | | event_b_comprehension_set(['$'(x),'$'(y)],'$'(x),conjunct(member('$'(x),natural_set),member('$'(y),natural_set)))),_) ). |
| 339 | | :- assert_must_fail( test_simp_rule('SIMP_SUBSETEQ_COMPSET_R', |
| 340 | | subset('$'(s),event_b_comprehension_set(['$'(x)],'$'(y),greater('$'(x),'$'(y)))),_) ). |
| 341 | | :- assert_must_succeed(( test_simp_rule('SIMP_SUBSETEQ_COMPSET_R', |
| 342 | | subset('$'(s),event_b_comprehension_set(['$'(x)],'$'(x),greater('$'(x),'$'(y)))),R), |
| 343 | | R=forall([NewId],member(NewId,'$'(s)),greater(NewId,'$'(y))), NewId \= '$'(x), NewId \= '$'(y) )). |
| 344 | | :- assert_must_succeed(( test_simp_rule('SIMP_SUBSETEQ_COMPSET_R', |
| 345 | | subset('$'(s),event_b_comprehension_set(['$'(x),'$'(y)],couple('$'(x),'$'(y)), |
| 346 | | conjunct(member('$'(x),natural_set),member('$'(y),natural_set)))),R), |
| 347 | | R=forall([NewId1,NewId2],member(couple(NewId1,NewId2),'$'(s)), |
| 348 | | conjunct(member(NewId1,natural_set),member(NewId2,natural_set))), \+ member(NewId1,['$'(x),'$'(y)]), \+ member(NewId2,['$'(x),'$'(y)]) )). |
| 349 | | :- assert_must_succeed(( test_simp_rule('SIMP_FUNIMAGE_LAMBDA', |
| 350 | | equal(5,function(event_b_comprehension_set(['$'(x)],couple('$'(x),add('$'(x),1)),member('$'(x),natural_set)),'$'(y))),R), |
| 351 | | R=equal(5,add('$'(y),1)) )). |
| 352 | | :- assert_must_succeed(( test_simp_rule('SIMP_FINITE_LAMBDA', |
| 353 | | finite(event_b_comprehension_set(['$'(x)],couple('$'(x),add('$'(x),1)),member('$'(x),'$'(set)))),R), |
| 354 | | R=finite(event_b_comprehension_set(['$'(x)],'$'(x),member('$'(x),'$'(set)))) )). |
| 355 | | :- assert_must_fail( test_simp_rule('SIMP_FINITE_LAMBDA', |
| 356 | | finite(event_b_comprehension_set(['$'(x),'$'(y)],couple('$'(x),'$'(y)), |
| 357 | | conjunct(member('$'(x),'$'(set)),member('$'(y),'$'(set))))),_) ). |
| 358 | | :- assert_must_fail( test_simp_rule('SIMP_FINITE_LAMBDA', |
| 359 | | finite(event_b_comprehension_set(['$'(x)],couple(1,'$'(x)),member('$'(x),'$'(set)))),_) ). |
| 360 | | :- assert_must_succeed(( test_simp_rule('SIMP_FINITE_LAMBDA', |
| 361 | | finite(event_b_comprehension_set(['$'(x)],couple('$'(x),1),member('$'(x),'$'(set)))),R), |
| 362 | | R=finite(event_b_comprehension_set(['$'(x)],'$'(x),member('$'(x),'$'(set)))) )). |
| 363 | | :- assert_must_succeed(( test_simp_rule('DERIV_FCOMP_DOMRES', |
| 364 | | composition(domain_restriction('$'(s),'$'(p)),'$'(q)),R),R=domain_restriction('$'(s),composition('$'(p),'$'(q))) )). |
| 365 | | :- assert_must_succeed(( test_simp_rule('DERIV_FCOMP_DOMSUB', |
| 366 | | composition('$'(t),composition(domain_subtraction('$'(s),'$'(p)),'$'(q))),R), |
| 367 | | R=composition('$'(t),domain_subtraction('$'(s),composition('$'(p),'$'(q)))) )). |
| 368 | | :- assert_must_fail( test_simp_rule('DERIV_FCOMP_RANRES',composition(range_restriction('$'(s),'$'(p)),'$'(q)),_) ). |
| 369 | | :- assert_must_succeed(( test_simp_rule('DERIV_FCOMP_RANRES', |
| 370 | | composition('$'(p),range_restriction('$'(q),'$'(s))),R), |
| 371 | | R=range_restriction(composition('$'(p),'$'(q)),'$'(s)) )). |
| 372 | | :- assert_must_succeed(( test_simp_rule('SIMP_BCOMP_ID', |
| 373 | | ring(ring(ring('$'(r),domain_restriction('$'(s),event_b_identity)),domain_restriction('$'(t),event_b_identity)),'$'(o)),R), |
| 374 | | R=ring(ring('$'(r),domain_restriction(intersection('$'(s),'$'(t)),event_b_identity)),'$'(o)) )). |
| 375 | | :- assert_must_succeed(( test_simp_rule('SIMP_BCOMP_ID', |
| 376 | | ring(ring(domain_restriction('$'(s),event_b_identity),domain_subtraction('$'(t),event_b_identity)),'$'(r)),R), |
| 377 | | R=ring(domain_restriction(set_subtraction('$'(s),'$'(t)),event_b_identity),'$'(r)) )). |
| 378 | | :- assert_must_succeed(( test_simp_rule('SIMP_BCOMP_ID', |
| 379 | | ring(ring(domain_subtraction('$'(s),event_b_identity),domain_subtraction('$'(t),event_b_identity)),'$'(r)),R), |
| 380 | | R=ring(domain_subtraction(union('$'(s),'$'(t)),event_b_identity),'$'(r)) )). |
| 381 | | :- assert_must_succeed(( test_simp_rule('SIMP_FCOMP_ID', |
| 382 | | composition(composition(domain_restriction('$'(s),event_b_identity), |
| 383 | | domain_restriction('$'(t),event_b_identity)),domain_subtraction('$'(q),event_b_identity)),R), |
| 384 | | R=domain_restriction(set_subtraction(intersection('$'(s),'$'(t)),'$'(q)),event_b_identity) )). |
| 385 | | :- assert_must_succeed(( test_simp_rule('SIMP_MULTI_ARITHREL_PLUS_PLUS', |
| 386 | | greater(add(add('$'(a),'$'(e)),'$'(b)),add(add('$'(c),'$'(e)),'$'(d))),R), |
| 387 | | R=greater(add('$'(a),'$'(b)),add('$'(c),'$'(d))) )). |
| 388 | | :- assert_must_succeed(( test_simp_rule('SIMP_MULTI_ARITHREL_PLUS_R', |
| 389 | | greater_equal('$'(c),add(add('$'(a),'$'(c)),'$'(b))),R), |
| 390 | | R=greater_equal(0,add('$'(a),'$'(b))) )). |
| 391 | | :- assert_must_succeed(( test_simp_rule('SIMP_MULTI_ARITHREL_PLUS_L', |
| 392 | | less_equal(add(add('$'(a),'$'(c)),'$'(b)),'$'(c)),R), |
| 393 | | R=less_equal(add('$'(a),'$'(b)),0) )). |
| 394 | | :- assert_must_succeed(( test_simp_rule('SIMP_MULTI_ARITHREL_MINUS_MINUS_R', |
| 395 | | less_equal(minus('$'(a),'$'(c)),minus('$'(b),'$'(c))),R), |
| 396 | | R=less_equal('$'(a),'$'(b)) )). |
| 397 | | :- assert_must_succeed(( test_simp_rule('SIMP_MULTI_ARITHREL_MINUS_MINUS_L', |
| 398 | | not_equal(minus('$'(c),'$'(a)),minus('$'(c),'$'(b))),R), |
| 399 | | R=not_equal('$'(b),'$'(a)) )). |
| 400 | | :- assert_must_succeed(( test_simp_rule('SIMP_MULTI_ARITHREL',less(-1,minus('$'(y),1)),R), |
| 401 | | R=less(0,'$'(y)) )). |
| 402 | | :- assert_must_succeed(( test_simp_rule('SIMP_MULTI_ARITHREL',less(minus('$'(u),'$'(x)),add('$'(u),'$'(z))),R), |
| 403 | | R=less(unary_minus('$'(x)),'$'(z)) )). |
| 404 | | :- assert_must_succeed(( test_simp_rule('SIMP_MULTI_ARITHREL',less(add('$'(u),unary_minus('$'(x))),minus('$'(v),'$'(x))),R), |
| 405 | | R=less('$'(u),'$'(v)) )). |
| 406 | | :- assert_must_succeed(( test_simp_rule('SIMP_MULTI_ARITHREL',less(minus('$'(u),'$'(x)),add(unary_minus('$'(x)),'$'(v))),R), |
| 407 | | R=less('$'(u),'$'(v)) )). |
| 408 | | :- assert_must_succeed(( test_simp_rule('SIMP_MULTI_ARITHREL',less(add(1,minus('$'(u),'$'(x))),add('$'(y),'$'(u))),R), |
| 409 | | R=less(minus(1,'$'(x)),'$'(y)) )). |
| 410 | | |
| 411 | | :- assert_must_succeed(( test_simp_rule_with_hyps('SIMP_FUNIMAGE_DOMRES',[member('$'(f),total_function('$'(a),'$'(b)))], |
| 412 | | function(domain_restriction('$'(e),'$'(f)),'$'(g)),R), |
| 413 | | R=function('$'(f),'$'(g)) )). |
| 414 | | :- assert_must_succeed(( test_simp_rule_with_hyps('SIMP_CARD_SETMINUS',[finite('$'(s)),subset('$'(t),'$'(s))], |
| 415 | | not_equal(0,card(set_subtraction('$'(s),'$'(t)))),R), R=not_equal(0,minus(card('$'(s)),card('$'(t)))) )). |
| 416 | | :- assert_must_succeed(( test_simp_rule_with_hyps('SIMP_CARD_SETMINUS_SETENUM', |
| 417 | | [member('$'(e),'$'(s)),member('$'(f),'$'(s)),member('$'(g),'$'(s))], |
| 418 | | not_equal(0,card(set_subtraction('$'(s),set_extension(['$'(e),'$'(f),'$'(g)])))),R), |
| 419 | | R=not_equal(0,minus(card('$'(s)),card(set_extension(['$'(e),'$'(f),'$'(g)])))) )). |
| 420 | | :- assert_must_succeed(( test_simp_rule_with_hyps('DERIV_DOM_TOTALREL'(_),[member('$'(r),total_function('$'(a),'$'(b)))], |
| 421 | | equal('$'(f),domain('$'(r))),R), R=equal('$'(f),'$'(a)) )). |
| 422 | | :- assert_must_fail( test_simp_rule_with_hyps('DERIV_DOM_TOTALREL'(_),[member('$'(r),relations('$'(a),'$'(b)))], |
| 423 | | equal('$'(f),domain('$'(r))),_) ). |
| 424 | | |
| 425 | | % DISTRI rules |
| 426 | | :- assert_must_succeed(( test_simp_rule('DISTRI_AND_OR',conjunct('$'(p),disjunct('$'(q),'$'(r))),R), |
| 427 | | R=disjunct(conjunct('$'(p),'$'(q)),conjunct('$'(p),'$'(r))) )). |
| 428 | | :- assert_must_succeed(( test_simp_rule('DISTRI_AND_OR',conjunct(disjunct(disjunct('$'(q),'$'(s)),'$'(r)),'$'(t)),R), |
| 429 | | R=disjunct(disjunct(conjunct('$'(q),'$'(t)),conjunct('$'(s),'$'(t))),conjunct('$'(r),'$'(t))) )). |
| 430 | | :- assert_must_succeed(( test_simp_rule('DISTRI_OR_AND',disjunct('$'(p),conjunct('$'(q),'$'(r))),R), |
| 431 | | R=conjunct(disjunct('$'(p),'$'(q)),disjunct('$'(p),'$'(r))) )). |
| 432 | | :- assert_must_succeed(( test_simp_rule('DISTRI_SUBSETEQ_BUNION_SING',subset(union('$'(s),set_extension(['$'(f)])),'$'(t)),R), |
| 433 | | R=conjunct(subset('$'(s),'$'(t)),member('$'(f),'$'(t))) )). |
| 434 | | :- assert_must_succeed(( test_simp_rule('DISTRI_SUBSETEQ_BUNION_SING', |
| 435 | | subset(union(union('$'(s),set_extension(['$'(f)])),'$'(g)),'$'(t)),R), |
| 436 | | R=conjunct(conjunct(subset('$'(s),'$'(t)),member('$'(f),'$'(t))),subset('$'(g),'$'(t))) )). |
| 437 | | :- assert_must_succeed(( test_simp_rule('DISTRI_BINTER_SETMINUS',intersection('$'(a),set_subtraction('$'(s),'$'(t))),R), |
| 438 | | R=set_subtraction(intersection('$'(a),'$'(s)),intersection('$'(a),'$'(t))) )). |
| 439 | | :- assert_must_succeed(( test_simp_rule('DISTRI_SETMINUS_BUNION',set_subtraction('$'(a),union('$'(s),'$'(t))),R), |
| 440 | | R=set_subtraction(set_subtraction('$'(a),'$'(s)),'$'(t)) )). |
| 441 | | :- assert_must_succeed(( test_simp_rule('DISTRI_DPROD_BUNION',direct_product('$'(r),union('$'(s),'$'(t))),R), |
| 442 | | R=union(direct_product('$'(r),'$'(s)),direct_product('$'(r),'$'(t))) )). % distri_r |
| 443 | | :- assert_must_fail( test_simp_rule('DISTRI_DPROD_BUNION',direct_product(union('$'(s),'$'(t)),'$'(r)),_) ). |
| 444 | | :- assert_must_succeed(( test_simp_rule('DISTRI_OVERL_BUNION_L',overwrite(union('$'(p),'$'(q)),'$'(r)),R), |
| 445 | | R=union(overwrite('$'(p),'$'(r)),overwrite('$'(q),'$'(r))) )). % distri_l |
| 446 | | :- assert_must_fail( test_simp_rule('DISTRI_OVERL_BUNION_L',overwrite('$'(r),union('$'(p),'$'(q))),_) ). |
| 447 | | :- assert_must_succeed(( test_simp_rule('DISTRI_DOMSUB_BUNION_L',domain_subtraction(union('$'(p),'$'(q)),'$'(r)),R), |
| 448 | | R=intersection(domain_subtraction('$'(p),'$'(r)),domain_subtraction('$'(q),'$'(r))) )). |
| 449 | | :- assert_must_succeed(( test_simp_rule('DISTRI_CONVERSE_BUNION',reverse(union(union('$'(r),'$'(b)),'$'(p))),R), |
| 450 | | R=union(union(reverse('$'(r)),reverse('$'(b))),reverse('$'(p))) )). |
| 451 | | :- assert_must_succeed(( test_simp_rule('DISTRI_CONVERSE_FCOMP', |
| 452 | | reverse(composition('$'(r),'$'(b))),R), R=composition(reverse('$'(b)),reverse('$'(r))) )). |
| 453 | | :- assert_must_succeed(( test_simp_rule('DISTRI_RAN_BUNION',range(union(union('$'(r),'$'(b)),'$'(c))),R), |
| 454 | | R=union(union(range('$'(r)),range('$'(b))),range('$'(c))) )). |
| 455 | | :- assert_must_succeed(( test_simp_rule('DISTRI_RANSUB_BUNION_R', |
| 456 | | range_subtraction('$'(r),union('$'(s),'$'(t))),R), |
| 457 | | R=intersection(range_subtraction('$'(r),'$'(s)),range_subtraction('$'(r),'$'(t))) )). |
| 458 | | :- assert_must_succeed(( test_simp_rule('DISTRI_RANSUB_BUNION_L', |
| 459 | | range_subtraction(union('$'(s),'$'(t)),'$'(r)),R), |
| 460 | | R=union(range_subtraction('$'(s),'$'(r)),range_subtraction('$'(t),'$'(r))) )). |
| 461 | | :- assert_must_succeed(( test_simp_rule('DISTRI_RANSUB_BINTER_R', |
| 462 | | range_subtraction('$'(r),intersection(intersection('$'(s),'$'(t)),'$'(u))),R), |
| 463 | | R=union(union(range_subtraction('$'(r),'$'(s)),range_subtraction('$'(r),'$'(t))),range_subtraction('$'(r),'$'(u))) )). |
| 464 | | :- assert_must_succeed(( test_simp_rule('DISTRI_MINUS',minus('$'(a),add(add('$'(b),'$'(c)),'$'(d))),R), |
| 465 | | R=minus(minus(minus('$'(a),'$'(b)),'$'(c)),'$'(d)) )). |
| 466 | | :- assert_must_succeed(( test_simp_rule('DISTRI_MINUS',minus('$'(a),minus(minus('$'(b),'$'(c)),'$'(d))),R), |
| 467 | | R=add(add(minus('$'(a),'$'(b)),'$'(c)),'$'(d)) )). |
| 468 | | :- assert_must_succeed(( test_simp_rule('DISTRI_MINUS',minus('$'(a),add('$'(x),'$'(y))),R), |
| 469 | | R=minus(minus('$'(a),'$'(x)),'$'(y)) )). |
| 470 | | :- assert_must_succeed(( test_simp_rule('DISTRI_MINUS',minus('$'(a),minus('$'(x),'$'(y))),R), |
| 471 | | R=add(minus('$'(a),'$'(x)),'$'(y)) )). |
| 472 | | :- assert_must_succeed(( test_simp_rule('DISTRI_MINUS',minus('$'(a),add(unary_minus('$'(x)),'$'(y))),R), |
| 473 | | R=minus(add('$'(a),'$'(x)),'$'(y)) )). |
| 474 | | :- assert_must_succeed(( test_simp_rule('DISTRI_MINUS',minus('$'(a),minus(unary_minus('$'(x)),'$'(y))),R), |
| 475 | | R=add(add('$'(a),'$'(x)),'$'(y)) )). |
| 476 | | :- assert_must_succeed(( test_simp_rule('DISTRI_MINUS',unary_minus(add('$'(x),'$'(y))),R), |
| 477 | | R=minus(unary_minus('$'(x)),'$'(y)) )). |
| 478 | | :- assert_must_succeed(( test_simp_rule('DISTRI_MINUS',unary_minus(minus('$'(x),'$'(y))),R), |
| 479 | | R=add(unary_minus('$'(x)),'$'(y)) )). |
| 480 | | :- assert_must_succeed(( test_simp_rule('DISTRI_MINUS',unary_minus(add(unary_minus('$'(x)),'$'(y))),R), |
| 481 | | R=minus('$'(x),'$'(y)) )). |
| 482 | | :- assert_must_succeed(( test_simp_rule('DISTRI_MINUS',unary_minus(minus(unary_minus('$'(x)),'$'(y))),R), |
| 483 | | R=add('$'(x),'$'(y)) )). |
| 484 | | :- assert_must_succeed(( test_simp_rule('DISTRI_MINUS',unary_minus(minus(add('$'(u),'$'(x)),'$'(y))),R), |
| 485 | | R=add(minus(unary_minus('$'(u)),'$'(x)),'$'(y)) )). |
| 486 | | :- assert_must_succeed(( test_simp_rule('DISTRI_PROD_PLUS',multiplication('$'(a),add('$'(b),'$'(c))),R), |
| 487 | | R=add(multiplication('$'(a),'$'(b)),multiplication('$'(a),'$'(c))) )). |
| 488 | | :- assert_must_succeed(( test_simp_rule('DISTRI_PROD_MINUS',multiplication('$'(a),minus('$'(b),'$'(c))),R), |
| 489 | | R=minus(multiplication('$'(a),'$'(b)),multiplication('$'(a),'$'(c))) )). |
| 490 | | :- assert_must_succeed(( test_simp_rule('DISTRI_IMP_AND',implication('$'(p),conjunct('$'(q),'$'(r))),R), |
| 491 | | R=conjunct(implication('$'(p),'$'(q)),implication('$'(p),'$'(r))) )). |
| 492 | | :- assert_must_succeed(( test_simp_rule('DISTRI_IMP_OR',implication(disjunct('$'(p),'$'(q)),'$'(r)),R), |
| 493 | | R=conjunct(implication('$'(p),'$'(r)),implication('$'(q),'$'(r))) )). |
| 494 | | :- assert_must_succeed(( test_simp_rule('DISTRI_FCOMP_BUNION_R',composition('$'(r),union('$'(s),'$'(t))),R), |
| 495 | | R=union(composition('$'(r),'$'(s)),composition('$'(r),'$'(t))) )). |
| 496 | | :- assert_must_succeed(( test_simp_rule('DISTRI_FCOMP_BUNION_L',composition(union('$'(s),'$'(t)),'$'(r)),R), |
| 497 | | R=union(composition('$'(s),'$'(r)),composition('$'(t),'$'(r))) )). |
| 498 | | :- assert_must_succeed(( test_simp_rule('DISTRI_DOMRES_BUNION_L',domain_restriction(union('$'(s),'$'(t)),'$'(r)),R), |
| 499 | | R=union(domain_restriction('$'(s),'$'(r)),domain_restriction('$'(t),'$'(r))) )). |
| 500 | | :- assert_must_succeed(( test_simp_rule('DISTRI_DOMRES_BUNION_R',domain_restriction('$'(r),union('$'(s),'$'(t))),R), |
| 501 | | R=union(domain_restriction('$'(r),'$'(s)),domain_restriction('$'(r),'$'(t))) )). |
| 502 | | :- assert_must_succeed(( test_simp_rule('DISTRI_DOMRES_BINTER_R',domain_restriction('$'(r),intersection('$'(s),'$'(t))),R), |
| 503 | | R=intersection(domain_restriction('$'(r),'$'(s)),domain_restriction('$'(r),'$'(t))) )). |
| 504 | | :- assert_must_succeed(( test_simp_rule('DISTRI_DOMRES_BINTER_L',domain_restriction(intersection('$'(s),'$'(t)),'$'(r)),R), |
| 505 | | R=intersection(domain_restriction('$'(s),'$'(r)),domain_restriction('$'(t),'$'(r))) )). |
| 506 | | :- assert_must_succeed(( test_simp_rule('DISTRI_DOMRES_SETMINUS_R',domain_restriction('$'(r),set_subtraction('$'(s),'$'(t))),R), |
| 507 | | R=set_subtraction(domain_restriction('$'(r),'$'(s)),domain_restriction('$'(r),'$'(t))) )). |
| 508 | | :- assert_must_succeed(( test_simp_rule('DISTRI_DOMRES_SETMINUS_L',domain_restriction(set_subtraction('$'(s),'$'(t)),'$'(r)),R), |
| 509 | | R=set_subtraction(domain_restriction('$'(s),'$'(r)),domain_restriction('$'(t),'$'(r))) )). |
| 510 | | :- assert_must_succeed(( test_simp_rule('DISTRI_DOMSUB_BINTER_L',domain_subtraction(intersection('$'(p),'$'(q)),'$'(r)),R), |
| 511 | | R=union(domain_subtraction('$'(p),'$'(r)),domain_subtraction('$'(q),'$'(r))) )). |
| 512 | | :- assert_must_succeed(( test_simp_rule('DISTRI_RANRES_BUNION_R',range_restriction('$'(r),union('$'(s),'$'(t))),R), |
| 513 | | R=union(range_restriction('$'(r),'$'(s)),range_restriction('$'(r),'$'(t))) )). |
| 514 | | :- assert_must_succeed(( test_simp_rule('DISTRI_RANRES_BUNION_L',range_restriction(union('$'(s),'$'(t)),'$'(r)),R), |
| 515 | | R=union(range_restriction('$'(s),'$'(r)),range_restriction('$'(t),'$'(r))) )). |
| 516 | | :- assert_must_succeed(( test_simp_rule('DISTRI_RANRES_BINTER_L',range_restriction(intersection('$'(s),'$'(t)),'$'(r)),R), |
| 517 | | R=intersection(range_restriction('$'(s),'$'(r)),range_restriction('$'(t),'$'(r))) )). |
| 518 | | :- assert_must_succeed(( test_simp_rule('DISTRI_RANRES_BINTER_R',range_restriction('$'(r),intersection('$'(s),'$'(t))),R), |
| 519 | | R=intersection(range_restriction('$'(r),'$'(s)),range_restriction('$'(r),'$'(t))) )). |
| 520 | | :- assert_must_succeed(( test_simp_rule('DISTRI_RANRES_SETMINUS_R',range_restriction('$'(r),set_subtraction('$'(s),'$'(t))),R), |
| 521 | | R=set_subtraction(range_restriction('$'(r),'$'(s)),range_restriction('$'(r),'$'(t))) )). |
| 522 | | :- assert_must_succeed(( test_simp_rule('DISTRI_RANRES_SETMINUS_L',range_restriction(set_subtraction('$'(s),'$'(t)),'$'(r)),R), |
| 523 | | R=set_subtraction(range_restriction('$'(s),'$'(r)),range_restriction('$'(t),'$'(r))) )). |
| 524 | | :- assert_must_succeed(( test_simp_rule('DISTRI_CPROD_BINTER',cartesian_product('$'(a),intersection('$'(b),'$'(c))),R), |
| 525 | | R=intersection(cartesian_product('$'(a),'$'(b)),cartesian_product('$'(a),'$'(c))) )). |
| 526 | | :- assert_must_succeed(( test_simp_rule('DISTRI_CPROD_BUNION',cartesian_product('$'(a),union('$'(b),'$'(c))),R), |
| 527 | | R=union(cartesian_product('$'(a),'$'(b)),cartesian_product('$'(a),'$'(c))) )). |
| 528 | | :- assert_must_succeed(( test_simp_rule('DISTRI_CPROD_SETMINUS',cartesian_product('$'(a),set_subtraction('$'(b),'$'(c))),R), |
| 529 | | R=set_subtraction(cartesian_product('$'(a),'$'(b)),cartesian_product('$'(a),'$'(c))) )). |
| 530 | | :- assert_must_succeed(( test_simp_rule('DISTRI_BCOMP_BUNION',ring('$'(r),union('$'(s),'$'(t))),R), |
| 531 | | R=union(ring('$'(r),'$'(s)),ring('$'(r),'$'(t))) )). |
| 532 | | :- assert_must_succeed(( test_simp_rule('DISTRI_DPROD_SETMINUS',direct_product('$'(r),set_subtraction('$'(s),'$'(t))),R), |
| 533 | | R=set_subtraction(direct_product('$'(r),'$'(s)),direct_product('$'(r),'$'(t))) )). |
| 534 | | :- assert_must_succeed(( test_simp_rule('DISTRI_DPROD_BINTER',direct_product('$'(r),intersection('$'(s),'$'(t))),R), |
| 535 | | R=intersection(direct_product('$'(r),'$'(s)),direct_product('$'(r),'$'(t))) )). |
| 536 | | :- assert_must_succeed(( test_simp_rule('DISTRI_DPROD_OVERL',direct_product('$'(r),overwrite('$'(s),'$'(t))),R), |
| 537 | | R=overwrite(direct_product('$'(r),'$'(s)),direct_product('$'(r),'$'(t))) )). |
| 538 | | :- assert_must_succeed(( test_simp_rule('DISTRI_PPROD_BUNION',parallel_product('$'(r),union('$'(s),'$'(t))),R), |
| 539 | | R=union(parallel_product('$'(r),'$'(s)),parallel_product('$'(r),'$'(t))) )). |
| 540 | | :- assert_must_succeed(( test_simp_rule('DISTRI_PPROD_BINTER',parallel_product('$'(r),intersection('$'(s),'$'(t))),R), |
| 541 | | R=intersection(parallel_product('$'(r),'$'(s)),parallel_product('$'(r),'$'(t))) )). |
| 542 | | :- assert_must_succeed(( test_simp_rule('DISTRI_PPROD_SETMINUS',parallel_product('$'(r),set_subtraction('$'(s),'$'(t))),R), |
| 543 | | R=set_subtraction(parallel_product('$'(r),'$'(s)),parallel_product('$'(r),'$'(t))) )). |
| 544 | | :- assert_must_succeed(( test_simp_rule('DISTRI_PPROD_OVERL',parallel_product('$'(r),overwrite('$'(s),'$'(t))),R), |
| 545 | | R=overwrite(parallel_product('$'(r),'$'(s)),parallel_product('$'(r),'$'(t))) )). |
| 546 | | :- assert_must_succeed(( test_simp_rule('DISTRI_DOMRES_DPROD',domain_restriction('$'(p),direct_product('$'(r),'$'(s))),R), |
| 547 | | R=direct_product(domain_restriction('$'(p),'$'(r)),domain_restriction('$'(p),'$'(s))) )). |
| 548 | | :- assert_must_succeed(( test_simp_rule('DISTRI_DOMRES_OVERL',domain_restriction('$'(p),overwrite('$'(r),'$'(s))),R), |
| 549 | | R=overwrite(domain_restriction('$'(p),'$'(r)),domain_restriction('$'(p),'$'(s))) )). |
| 550 | | :- assert_must_succeed(( test_simp_rule('DISTRI_DOMSUB_BUNION_R',domain_subtraction('$'(p),union('$'(r),'$'(s))),R), |
| 551 | | R=union(domain_subtraction('$'(p),'$'(r)),domain_subtraction('$'(p),'$'(s))) )). |
| 552 | | :- assert_must_succeed(( test_simp_rule('DISTRI_DOMSUB_BINTER_R',domain_subtraction('$'(p),intersection('$'(r),'$'(s))),R), |
| 553 | | R=intersection(domain_subtraction('$'(p),'$'(r)),domain_subtraction('$'(p),'$'(s))) )). |
| 554 | | :- assert_must_succeed(( test_simp_rule('DISTRI_DOMSUB_DPROD',domain_subtraction('$'(p),direct_product('$'(r),'$'(s))),R), |
| 555 | | R=direct_product(domain_subtraction('$'(p),'$'(r)), domain_subtraction('$'(p),'$'(s))) )). |
| 556 | | :- assert_must_succeed(( test_simp_rule('DISTRI_DOMSUB_OVERL',domain_subtraction('$'(p),overwrite('$'(r),'$'(s))),R), |
| 557 | | R=overwrite(domain_subtraction('$'(p),'$'(r)),domain_subtraction('$'(p),'$'(s))) )). |
| 558 | | :- assert_must_succeed(( test_simp_rule('DISTRI_OVERL_BINTER_L',overwrite(intersection('$'(p),'$'(q)),'$'(r)),R), |
| 559 | | R=intersection(overwrite('$'(p),'$'(r)),overwrite('$'(q),'$'(r))) )). |
| 560 | | :- assert_must_succeed(( test_simp_rule('DISTRI_RANSUB_BINTER_L',range_subtraction(intersection('$'(p),'$'(q)),'$'(r)),R), |
| 561 | | R=intersection(range_subtraction('$'(p),'$'(r)),range_subtraction('$'(q),'$'(r))) )). |
| 562 | | :- assert_must_succeed(( test_simp_rule('DERIV_TYPE_SETMINUS_BINTER',set_subtraction(integer_set,intersection('$'(s),'$'(t))),R), |
| 563 | | R=union(set_subtraction(integer_set,'$'(s)),set_subtraction(integer_set,'$'(t))) )). |
| 564 | | :- assert_must_succeed(( test_simp_rule('DERIV_TYPE_SETMINUS_BUNION',set_subtraction(bool_set,union('$'(s),'$'(t))),R), |
| 565 | | R=intersection(set_subtraction(bool_set,'$'(s)),set_subtraction(bool_set,'$'(t))) )). |
| 566 | | :- assert_must_succeed(( test_simp_rule('DISTRI_CONVERSE_BINTER',reverse(intersection('$'(r),'$'(s))),R), |
| 567 | | R=intersection(reverse('$'(r)),reverse('$'(s))) )). |
| 568 | | :- assert_must_succeed(( test_simp_rule('DISTRI_CONVERSE_SETMINUS',reverse(set_subtraction('$'(r),'$'(s))),R), |
| 569 | | R=set_subtraction(reverse('$'(r)),reverse('$'(s))) )). |
| 570 | | :- assert_must_succeed(( test_simp_rule('DISTRI_CONVERSE_BCOMP',reverse(ring('$'(r),'$'(s))),R), |
| 571 | | R=ring(reverse('$'(s)),reverse('$'(r))) )). |
| 572 | | :- assert_must_succeed(( test_simp_rule('DISTRI_CONVERSE_PPROD',reverse(parallel_product('$'(s),'$'(r))),R), |
| 573 | | R=parallel_product(reverse('$'(s)),reverse('$'(r))) )). |
| 574 | | :- assert_must_succeed(( test_simp_rule('DISTRI_CONVERSE_DOMRES',reverse(domain_restriction('$'(s),'$'(r))),R), |
| 575 | | R=range_restriction(reverse('$'(r)),'$'(s)) )). |
| 576 | | :- assert_must_succeed(( test_simp_rule('DISTRI_CONVERSE_DOMSUB',reverse(domain_subtraction('$'(s),'$'(r))),R), |
| 577 | | R=range_subtraction(reverse('$'(r)),'$'(s)) )). |
| 578 | | :- assert_must_succeed(( test_simp_rule('DISTRI_CONVERSE_RANRES',reverse(range_restriction('$'(r),'$'(s))),R), |
| 579 | | R=domain_restriction('$'(s),reverse('$'(r))) )). |
| 580 | | :- assert_must_succeed(( test_simp_rule('DISTRI_CONVERSE_RANSUB',reverse(range_subtraction('$'(r),'$'(s))),R), |
| 581 | | R=domain_subtraction('$'(s),reverse('$'(r))) )). |
| 582 | | :- assert_must_succeed(( test_simp_rule('DISTRI_DOM_BUNION',domain(union('$'(r),'$'(s))),R), |
| 583 | | R=union(domain('$'(r)),domain('$'(s))) )). |
| 584 | | :- assert_must_succeed(( test_simp_rule('DISTRI_RELIMAGE_BUNION_R',image('$'(r),union('$'(s),'$'(t))),R), |
| 585 | | R=union(image('$'(r),'$'(s)),image('$'(r),'$'(t))) )). |
| 586 | | :- assert_must_succeed(( test_simp_rule('DISTRI_RELIMAGE_BUNION_L',image(union('$'(s),'$'(t)),'$'(r)),R), |
| 587 | | R=union(image('$'(s),'$'(r)),image('$'(t),'$'(r))) )). |
| 588 | | |
| 589 | | :- assert_must_succeed(( test_transition_new_hyp(fun_image_goal, |
| 590 | | [member('$'(f),partial_function(natural_set,bool_set))],equal('$'(t),function('$'(f),'$'(e))),R), |
| 591 | | R= member(function('$'(f),'$'(e)),bool_set) )). |
| 592 | | |
| 593 | | :- assert_must_succeed(( test_transition_r(subset_inter,[subset('$'(x),'$'(u))],equal(intersection('$'(x),'$'(u)),empty_set),R), |
| 594 | | R= equal('$'(x),empty_set) )). |
| 595 | | :- assert_must_succeed(( test_transition_r(in_inter,[member('$'(e),'$'(t))], |
| 596 | | equal(intersection('$'(t),set_extension(['$'(e)])),empty_set),R), R= equal(set_extension(['$'(e)]),empty_set) )). |
| 597 | | |
| 598 | | :- assert_must_succeed(( test_simp_rule_with_types('DERIV_EQUAL',[subset('$'(s),natural_set),subset('$'(t),natural_set)], |
| 599 | | equal('$'(s),'$'(t)),R), R=conjunct(subset('$'(s),'$'(t)),subset('$'(t),'$'(s))) )). |
| 600 | | :- assert_must_succeed(( test_simp_rule_with_types('DERIV_EQUAL',[equal('$'(s),natural_set)],equal('$'(s),set_extension([4])),R), |
| 601 | | R=conjunct(subset('$'(s),set_extension([4])),subset(set_extension([4]),'$'(s))) )). |
| 602 | | :- assert_must_succeed(( test_simp_rule_with_types('DERIV_EQUAL',[member('$'(s),pow_subset(bool_set))], |
| 603 | | equal(set_extension([boolean_true]),'$'(s)),R), |
| 604 | | R=conjunct(subset(set_extension([boolean_true]),'$'(s)),subset('$'(s),set_extension([boolean_true]))) )). |
| 605 | | :- assert_must_succeed(( test_simp_rule_with_types('DERIV_EQUAL',[],equal(set_extension([1]),set_extension([1])),R), |
| 606 | | R=conjunct(subset(set_extension([1]),set_extension([1])),subset(set_extension([1]),set_extension([1]))) )). |
| 607 | | :- assert_must_succeed(( test_simp_rule_with_types('DERIV_SUBSETEQ',[subset('$'(s),natural_set),subset('$'(t),natural_set)], |
| 608 | | subset('$'(s),'$'(t)),R),R=subset(set_subtraction('INTEGER','$'(t)),set_subtraction('INTEGER','$'(s))) )). |
| 609 | | :- assert_must_succeed(( test_simp_rule_with_types('DERIV_NOT_EQUAL',[],not_equal('$'(e),1),R), |
| 610 | | R=disjunct(less('$'(e),1),greater('$'(e),1)) )). |
| 611 | | :- assert_must_fail( test_simp_rule_with_types('DERIV_NOT_EQUAL',[],not_equal('$'(e),'$'(f)),_) ). |
| 612 | | :- assert_must_succeed(( test_simp_rule_with_types('DERIV_NOT_EQUAL',[member('$'(f),natural_set)],not_equal('$'(e),'$'(f)),R), |
| 613 | | R=disjunct(less('$'(e),'$'(f)),greater('$'(e),'$'(f))) )). |
| 614 | | :- assert_must_succeed(( test_simp_rule_with_types('DERIV_NOT_EQUAL', |
| 615 | | [exists(['$'(x)],conjunct(conjunct(member('$'(x),natural_set),greater('$'(x),'$'(e))),greater('$'(x),'$'(f))))], |
| 616 | | not_equal('$'(e),'$'(f)),R), |
| 617 | | R=disjunct(less('$'(e),'$'(f)),greater('$'(e),'$'(f))) )). |
| 618 | | :- assert_must_succeed(( test_simp_rule_with_types('DERIV_NOT_EQUAL',[],not_equal(add(1,'$'(e)),multiplication('$'(f),2)),R), |
| 619 | | R=disjunct(less(add(1,'$'(e)),multiplication('$'(f),2)),greater(add(1,'$'(e)),multiplication('$'(f),2))) )). |
| 620 | | :- assert_must_succeed(( test_simp_rule_with_types('DERIV_EXPAND_PRJS',[member('$'(e),cartesian_product('INTEGER','INTEGER'))],member('$'(e),'$'(f)),R), |
| 621 | | R=member(couple(function(event_b_first_projection_v2,'$'(e)),function(event_b_second_projection_v2,'$'(e))),'$'(f)) )). |
| 622 | | :- assert_must_succeed(( test_simp_rule_with_types('DERIV_EXPAND_PRJS',[member('$'(e),cartesian_product('INTEGER',cartesian_product('INTEGER','INTEGER')))], |
| 623 | | member('$'(e),'$'(f)),R), |
| 624 | | R=member(couple(function(event_b_first_projection_v2,'$'(e)),function(event_b_second_projection_v2,'$'(e))),'$'(f)) )). |
| 625 | | :- assert_must_fail( test_simp_rule_with_types('DERIV_EXPAND_PRJS',[member('$'(e),'INTEGER')],member('$'(e),'$'(f)),_) ). |
| 626 | | |
| 627 | | :- assert_must_succeed(( sequent_prover_trans(imp_l1(_), |
| 628 | | [greater('$'(x),'$'(y)),implication(greater_equal('$'(x),'$'(y)),equal('$'(c),boolean_true))],R), |
| 629 | | R= [greater('$'(x),'$'(y)),equal('$'(c),boolean_true)] )). |
| 630 | | :- assert_must_succeed(( sequent_prover_trans(imp_l1(_), |
| 631 | | [greater('$'(x),'$'(y)),implication(conjunct('$'(p),greater_equal('$'(x),'$'(y))),equal('$'(c),boolean_true))],R), |
| 632 | | R= [greater('$'(x),'$'(y)),implication('$'(p),equal('$'(c),boolean_true))] )). |
| 633 | | :- assert_must_succeed(( sequent_prover_trans(imp_l1(_), |
| 634 | | [greater('$'(x),'$'(y)),implication(conjunct(conjunct('$'(p),greater_equal('$'(x),'$'(y))),'$'(q)),equal('$'(c),boolean_true))],R), |
| 635 | | R= [greater('$'(x),'$'(y)),implication(conjunct('$'(p),'$'(q)),equal('$'(c),boolean_true))] )). |
| 636 | | :- assert_must_succeed(( sequent_prover_trans(one_point_l(_), |
| 637 | | [forall(['$'(x)],conjunct(greater('$'(x),'$'(y)),equal('$'(x),1)),greater(2,'$'(y)))],R), |
| 638 | | R= [implication(greater(1,'$'(y)),greater(2,'$'(y)))] )). |
| 639 | | :- assert_must_succeed(( sequent_prover_trans(one_point_l(_), |
| 640 | | [forall(['$'(x),'$'(y)],conjunct(member('$'(y),set_extension([1,2])),equal('$'(x),5)),greater('$'(x),'$'(y)))],R), |
| 641 | | R= [forall(['$'(y)],member('$'(y),set_extension([1,2])),greater(5,'$'(y)))] )). |
| 642 | | :- assert_must_succeed(( sequent_prover_trans(one_point_l(_), |
| 643 | | [forall(['$'(x)],equal('$'(x),1),greater('$'(x),'$'(y)))],R), R= [implication(truth,greater(1,'$'(y)))] )). |
| 644 | | |
| 645 | | :- assert_must_succeed(( sequent_prover_trans(one_point_r(_),[], |
| 646 | | forall(['$'(x)],conjunct(greater('$'(x),'$'(y)),equal('$'(x),1)),greater(2,'$'(y))),[],R), |
| 647 | | R= implication(greater(1,'$'(y)),greater(2,'$'(y))) )). |
| 648 | | :- assert_must_succeed(( sequent_prover_trans(one_point_r(_),[], |
| 649 | | forall(['$'(x),'$'(y)],conjunct(member('$'(y),set_extension([1,2])),equal('$'(x),5)),greater('$'(x),'$'(y))),[],R), |
| 650 | | R= forall(['$'(y)],member('$'(y),set_extension([1,2])),greater(5,'$'(y))) )). |
| 651 | | :- assert_must_succeed(( sequent_prover_trans(one_point_r(_),[], |
| 652 | | forall(['$'(x)],equal('$'(x),1),greater('$'(x),'$'(y))),[],R), R= implication(truth,greater(1,'$'(y))) )). |
| 653 | | |
| 654 | | :- assert_must_succeed(( test_transition_with_types_r(deriv_equal_card, |
| 655 | | [equal('$'(s),set_extension([1,2])),equal('$'(t),set_extension([3,4]))], |
| 656 | | equal(card('$'(s)),card('$'(t))),R),R= equal('$'(s),'$'(t)) )). |
| 657 | | :- assert_must_fail( test_transition_with_types_r(deriv_equal_card, |
| 658 | | [equal('$'(s),set_extension([1])),equal('$'(t),set_extension([boolean_false]))], |
| 659 | | equal(card('$'(s)),card('$'(t))),_) ). |
| 660 | | :- assert_must_succeed(( test_transition_with_types_r(deriv_le_card, |
| 661 | | [member('$'(s),pow1_subset(integer_set)),subset('$'(t),natural1_set)], |
| 662 | | less_equal(card('$'(s)),card('$'(t))),R),R= subset('$'(s),'$'(t)) )). |
| 663 | | :- assert_must_fail( test_transition_with_types_r(deriv_le_card,[subset('$'(s),bool_set),subset('$'(t),natural1_set)], |
| 664 | | less_equal(card('$'(s)),card('$'(t))),_) ). |
| 665 | | :- assert_must_succeed(( test_transition_with_types_r(all_r,[equal('$'(y),0)], |
| 666 | | forall(['$'(x)],member('$'(x),natural_set),greater_equal('$'(x),'$'(y))),R), |
| 667 | | R=implication(member('$'(x),natural_set),greater_equal('$'(x),'$'(y))) )). |
| 668 | | :- assert_must_succeed(( test_transition_with_types_r(all_r,[member('$'(x),bool_set),equal('$'(y),0)], |
| 669 | | forall(['$'(x)],member('$'(x),natural_set),greater_equal('$'(x),'$'(y))),R), |
| 670 | | R=implication(member(NewId,natural_set),greater_equal(NewId,'$'(y))), NewId \= '$'(x), NewId \= '$'(y) )). |
| 671 | | |
| 672 | | :- assert_must_succeed(( test_transition_with_types_l(xst_l,[],exists(['$'(x)],member('$'(x),bool_set)),R), |
| 673 | | R=member('$'(x),bool_set) )). |
| 674 | | :- assert_must_succeed(( test_transition_with_types_l(xst_l,[equal('$'(x),1)],exists(['$'(x)],member('$'(x),bool_set)),R), |
| 675 | | R=member(NewId,bool_set), NewId \= '$'(x) )). |
| 676 | | :- assert_must_succeed(( test_transition_with_types_l(xst_l,[equal('$'(x),1)], |
| 677 | | exists(['$'(x),'$'(y)],conjunct(member('$'(x),bool_set),equal('$'(x),'$'(y)))),R), |
| 678 | | R=conjunct(member(Id1,bool_set),equal(Id1,Id2)), Id1 \= Id2, Id1 \= '$'(x), Id2 \= '$'(y) )). |
| 679 | | |
| 680 | | :- assert_must_succeed(( sequent_prover_axiom(hyp,[equal('$'(x),1)],equal('$'(x),1)) )). |
| 681 | | :- assert_must_succeed(( sequent_prover_axiom(hyp,[greater('$'(x),1)],greater_equal('$'(x),1)) )). |
| 682 | | :- assert_must_succeed(( sequent_prover_axiom(hyp,[greater_equal('$'(x),1)],member('$'(x),natural_set)) )). |
| 683 | | :- assert_must_succeed(( sequent_prover_axiom(hyp_or,[equal('$'(x),'$'(y))],disjunct(greater('$'(x),'$'(y)),equal('$'(x),'$'(y)))) )). |
| 684 | | :- assert_must_succeed(( sequent_prover_axiom(false_hyp,[falsity],_) )). |
| 685 | | :- assert_must_succeed(( sequent_prover_axiom(cntr,[not_equal('$'(x),'$'(y)),equal('$'(x),'$'(y))],_) )). |
| 686 | | :- assert_must_succeed(( sequent_prover_axiom(cntr,[less('$'(x),'$'(y)),greater_equal('$'(x),'$'(y))],_) )). |
| 687 | | :- assert_must_succeed(( sequent_prover_axiom(cntr,[less('$'(x),'$'(y)),greater('$'(x),'$'(y))],_) )). |
| 688 | | :- assert_must_succeed(( sequent_prover_axiom(fin_rel,[member('$'(f),relations('$'(s),'$'(t))),finite('$'(s)),finite('$'(t))], |
| 689 | | finite('$'(f))) )). |
| 690 | | :- assert_must_succeed(( sequent_prover_axiom(fun_goal,[member('$'(f),partial_function('$'(s),'$'(t)))], |
| 691 | | member('$'(f),partial_function(integer_set,bool_set))) )). |
| 692 | | :- assert_must_fail( sequent_prover_axiom(fun_goal,[member('$'(f),partial_function('$'(s),'$'(t)))], |
| 693 | | member('$'(f),partial_function('$'(a),bool_set))) ). |
| 694 | | :- assert_must_fail( sequent_prover_axiom(fun_goal_rec, |
| 695 | | [member('$'(f),partial_function('$'(s),'$'(t)))], |
| 696 | | member('$'(f),partial_function(integer_set,bool_set))) ). |
| 697 | | :- assert_must_succeed(( sequent_prover_axiom(fun_goal_rec, |
| 698 | | [member('$'(f),relations('$'(r),partial_function('$'(s),'$'(t))))], |
| 699 | | member(function('$'(f),'$'(e)),partial_function(integer_set,bool_set))) )). |
| 700 | | :- assert_must_succeed(( sequent_prover_axiom(fun_goal_rec, |
| 701 | | [member('$'(f),total_relation('$'(l),total_surjection('$'(r),total_function('$'(s),'$'(t)))))], |
| 702 | | member(function(function('$'(f),'$'(e1)),'$'(e2)),partial_function(bool_set,bool_set))) )). |
| 703 | | :- assert_must_succeed(( sequent_prover_axiom('DOM_SUBSET', [subset('$'(a),'$'(b))], subset(domain('$'(a)),domain('$'(b)))) )). |
| 704 | | :- assert_must_succeed(( sequent_prover_axiom('RAN_SUBSET', [subset('$'(a),'$'(b))], subset(range('$'(a)),range('$'(b)))) )). |
| 705 | | :- assert_must_succeed(( sequent_prover_axiom('IN_DOM_CPROD', [member('$'(x),domain(cartesian_product('$'(a),'$'(b))))], |
| 706 | | member('$'(x),'$'(a))) )). |
| 707 | | :- assert_must_succeed(( sequent_prover_axiom('SETENUM_SUBSET', [subset(set_extension([1,2]),'$'(a))], member(1,'$'(a))) )). |
| 708 | | :- assert_must_succeed(( sequent_prover_axiom('OVR_RIGHT_SUBSET', [subset(overwrite('$'(f),'$'(g)),'$'(a))], |
| 709 | | subset('$'(g),'$'(a))) )). |
| 710 | | :- assert_must_succeed(( sequent_prover_axiom('OVR_RIGHT_SUBSET', [subset(overwrite(overwrite('$'(f),'$'(g)),'$'(h)),'$'(a))], |
| 711 | | subset(overwrite('$'(g),'$'(h)),'$'(a))) )). |
| 712 | | :- assert_must_fail( sequent_prover_axiom('OVR_RIGHT_SUBSET',[subset(overwrite(overwrite('$'(f),'$'(g)),'$'(h)),'$'(a))], |
| 713 | | subset(overwrite('$'(f),'$'(g)),'$'(a))) ). |
| 714 | | :- assert_must_succeed(( sequent_prover_axiom('RELSET_SUBSET_CPROD',[member('$'(f),relations('$'(a),'$'(b)))],subset('$'(f),cartesian_product('$'(a),'$'(b)))) )). |
| 715 | | :- assert_must_succeed(( sequent_prover_axiom('DERIV_IN_SUBSET', [member('$'(x),'$'(a)), subset('$'(a),'$'(b))],member('$'(x),'$'(b))) )). |
| 716 | | |
| 717 | | :- assert_must_fail( sequent_prover:wd_strict_term(conjunct(truth,equal(1,1))) ). |
| 718 | | :- assert_must_succeed(( sequent_prover:wd_strict_term(equivalence(truth,equal(1,1))) )). |
| 719 | | :- assert_must_succeed(( sequent_prover:rewrite_once('$'(x),'$'(y),equal('$'(x),'$'(x)),R), R=equal('$'(y),'$'(x)) )). |
| 720 | | :- assert_must_succeed(( sequent_prover:is_subterm(equal(_,_),conjunct(truth,equal('$'(x),'$'(x)))) )). |
| 721 | | :- assert_must_succeed(( sequent_prover:split_composition(composition('$'(f),'$'(g)),L,R), L='$'(f), R='$'(g) )). |
| 722 | | :- assert_must_succeed(( sequent_prover:split_composition(composition(composition('$'(f),'$'(g)),'$'(h)),composition('$'(f),'$'(g)),'$'(h)) )). |
| 723 | | :- assert_must_succeed(( sequent_prover:split_composition(composition(composition('$'(f),'$'(g)),'$'(h)),'$'(f),composition('$'(g),'$'(h))) )). |