| 1 | % Heinrich Heine Universitaet Duesseldorf | |
| 2 | % (c) 2025-2025 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 | test_transition(Rule,Hyp,NewHyp) :- | |
| 14 | ? | sequent_prover:sequent_prover_trans(simplify_hyp(Rule,_),state(sequent([Hyp],truth,success),[]), |
| 15 | state(sequent([NewHyp],truth,success),_),_). | |
| 16 | ||
| 17 | test_transition(Rule,Sequent,NewSequent) :- | |
| 18 | sequent_prover:sequent_prover_trans(Rule,state(Sequent,[]),state(NewSequent,[]),_) ; | |
| 19 | ? | sequent_prover:sequent_prover_trans(Rule,state(Sequent,[]),state(NewSequent,_)). |
| 20 | ||
| 21 | test_transition_with_hyps(Rule,Hyps,Hyp,NewHyp) :- | |
| 22 | ? | sequent_prover:sequent_prover_trans(simplify_hyp(Rule,_),state(sequent([Hyp|Hyps],truth,success),[]), |
| 23 | state(sequent(NewHyps,truth,success),_),_), | |
| 24 | ? | member(NewHyp,NewHyps), |
| 25 | \+ member(NewHyp,Hyps). | |
| 26 | ||
| 27 | test_transition_with_types(Rule,Hyps,Hyp,NewHyp) :- | |
| 28 | ? | sequent_prover:get_scope(Hyps,[],[identifier(IdsTypes)]), |
| 29 | sequent_prover:add_meta_infos(ids_types,[],IdsTypes,Info), | |
| 30 | ? | sequent_prover:sequent_prover_trans(simplify_hyp(Rule,_),state(sequent([Hyp|Hyps],truth,success),Info), |
| 31 | state(sequent(NewHyps,truth,success),_),_), | |
| 32 | ? | member(NewHyp,NewHyps), |
| 33 | \+ member(NewHyp,Hyps). | |
| 34 | ||
| 35 | :- assert_must_succeed(( test_transition('SIMP_SPECIAL_AND_BTRUE',conjunct(truth,'$'(v)),R), R='$'(v) )). | |
| 36 | :- assert_must_succeed((test_transition('SIMP_SPECIAL_AND_BTRUE',conjunct(truth,conjunct('$'(v),truth)),R), | |
| 37 | R=conjunct('$'(v),truth) )). | |
| 38 | :- assert_must_succeed(( test_transition('SIMP_SPECIAL_AND_BFALSE',conjunct(conjunct('$'(v),'$'(v)),falsity),R), | |
| 39 | R=falsity)). | |
| 40 | :- assert_must_succeed(( test_transition('SIMP_MULTI_AND',conjunct(conjunct('$'(v),'$'(w)),'$'(w)),R), | |
| 41 | R=conjunct('$'(v),'$'(w)) )). | |
| 42 | :- assert_must_succeed(( test_transition('SIMP_MULTI_AND',conjunct('$'(v),'$'(v)),R), R='$'(v) )). | |
| 43 | :- assert_must_succeed(( test_transition('SIMP_MULTI_AND',conjunct(conjunct(conjunct('$'(v),'$'(u)),'$'(u)),'$'(u)),R), | |
| 44 | R=conjunct('$'(v),'$'(u)) )). | |
| 45 | :- assert_must_succeed(( test_transition('SIMP_MULTI_AND_NOT',conjunct(conjunct(negation('$'(v)),'$'(w)),'$'(v)),R), R=falsity )). | |
| 46 | :- assert_must_succeed(( test_transition('SIMP_MULTI_AND_NOT',conjunct(negation(equal('$'(w),'$'(v))),equal('$'(v),'$'(w))),R), | |
| 47 | R=falsity )). | |
| 48 | :- assert_must_succeed(( test_transition('SIMP_SPECIAL_OR_BTRUE',disjunct(disjunct('$'(w),truth),'$'(v)),R), R=truth )). | |
| 49 | :- assert_must_succeed(( test_transition('SIMP_SPECIAL_OR_BFALSE',disjunct(disjunct(falsity,'$'(v)),falsity),R), | |
| 50 | R=disjunct('$'(v),falsity) )). | |
| 51 | :- assert_must_succeed(( test_transition('SIMP_MULTI_OR',disjunct('$'(v),'$'(v)),R), R='$'(v))). | |
| 52 | :- assert_must_succeed(( test_transition('SIMP_MULTI_OR_NOT',disjunct('$'(v),negation('$'(v))),R), R=truth)). | |
| 53 | :- assert_must_succeed(( test_transition('Evaluate tautology',implication(not_equal('$'(w),'$'(v)),truth),R), | |
| 54 | R=truth )). % SIMP_SPECIAL_IMP_BTRUE_R | |
| 55 | :- assert_must_succeed(( test_transition('SIMP_SPECIAL_IMP_BTRUE_L',implication(truth,not_equal('$'(w),'$'(v))),R), | |
| 56 | R=not_equal('$'(w),'$'(v)) )). | |
| 57 | :- assert_must_succeed(( test_transition('Evaluate tautology',implication(equal('$'(v),'$'(w)),equal('$'(w),'$'(v))),R), | |
| 58 | R=truth )). % SIMP_MULTI_IMP | |
| 59 | :- assert_must_succeed(( test_transition('Propagate negation',negation(less_equal('$'(v),'$'(w))),R), | |
| 60 | R=greater('$'(v),'$'(w)) )). % SIMP_NOT_LE | |
| 61 | :- assert_must_succeed(( test_transition('Propagate negation',negation(conjunct('$'(v),'$'(w))),R), | |
| 62 | R=disjunct(negation('$'(v)),negation('$'(w))))). % DISTRI_NOT_AND | |
| 63 | :- assert_must_succeed(( test_transition('Propagate negation',negation(conjunct(conjunct('$'(u),'$'(v)),'$'(w))),R), | |
| 64 | R=disjunct(disjunct(negation('$'(u)),negation('$'(v))),negation('$'(w))))). | |
| 65 | :- assert_must_succeed(( test_transition('Propagate negation',negation(implication('$'(u),'$'(v))),R), | |
| 66 | R=conjunct('$'(u),negation('$'(v))))). % DERIV_NOT_IMP | |
| 67 | :- assert_must_succeed(( test_transition('SIMP_SPECIAL_NOT_EQUAL_FALSE',negation(equal(boolean_false,'$'(e))),R), | |
| 68 | R=equal('$'(e),boolean_true))). % SIMP_SPECIAL_NOT_EQUAL_FALSE_L | |
| 69 | :- assert_must_succeed(( test_transition('SIMP_SPECIAL_NOT_EQUAL_TRUE',negation(equal('$'(e),boolean_true)),R), | |
| 70 | R=equal('$'(e),boolean_false))). % SIMP_SPECIAL_NOT_EQUAL_TRUE_R | |
| 71 | :- assert_must_succeed(( test_transition('SIMP_FORALL_AND', | |
| 72 | forall(['$'(x)],member('$'(x),natural1_set),conjunct(greater('$'(x),0),not_equal('$'(x),'$'(y)))),R), | |
| 73 | R=conjunct(forall(['$'(x)],member('$'(x),natural1_set),greater('$'(x),0)),forall(['$'(x)],member('$'(x),natural1_set),not_equal('$'(x),'$'(y)))))). | |
| 74 | :- assert_must_succeed(( test_transition('SIMP_FORALL_AND',forall(['$'(x),'$'(y)],'$'(p),conjunct(conjunct('$'(v),'$'(w)),'$'(u))),R), | |
| 75 | R=conjunct(conjunct(forall(['$'(x),'$'(y)],'$'(p),'$'(v)),forall(['$'(x),'$'(y)],'$'(p),'$'(w))),forall(['$'(x),'$'(y)],'$'(p),'$'(u))) )). | |
| 76 | :- assert_must_succeed(( test_transition('SIMP_EXISTS_OR',exists(['$'(x)],disjunct('$'(p),'$'(q))),R), | |
| 77 | R=disjunct(exists(['$'(x)],'$'(p)),exists(['$'(x)],'$'(q))) )). | |
| 78 | :- assert_must_succeed(( test_transition('SIMP_FORALL',forall(['$'(x),'$'(y)],greater('$'(x),0),'$'(q)),R), | |
| 79 | R=forall(['$'(x)],greater('$'(x),0),'$'(q)) )). | |
| 80 | :- assert_must_succeed(( test_transition('SIMP_FORALL',forall(['$'(y),'$'(z),'$'(x)],greater('$'(x),0),'$'(q)),R), | |
| 81 | R=forall(['$'(x)],greater('$'(x),0),'$'(q)) )). | |
| 82 | :- assert_must_succeed(( test_transition('SIMP_FORALL',forall(['$'(y),'$'(z),'$'(x)],disjunct(greater('$'(x),0),greater('$'(y),0)),'$'(q)),R), | |
| 83 | R=forall(['$'(y),'$'(x)],disjunct(greater('$'(x),0),greater('$'(y),0)),'$'(q)) )). | |
| 84 | :- assert_must_succeed(( test_transition('SIMP_EQUAL_MAPSTO',equal(couple('$'(e),'$'(f)),couple('$'(g),'$'(h))),R), | |
| 85 | R=conjunct(equal('$'(e),'$'(g)),equal('$'(f),'$'(h))) )). | |
| 86 | :- assert_must_succeed(( test_transition('SIMP_COMPSET_IN',event_b_comprehension_set(['$'(x)],'$'(x),member('$'(x),'$'(s))),R),R='$'(s) )). | |
| 87 | :- assert_must_succeed(( test_transition('SIMP_COMPSET_IN', | |
| 88 | event_b_comprehension_set(['$'(x),'$'(y)],couple('$'(x),'$'(y)),member(couple('$'(x),'$'(y)),'$'(s))),R),R='$'(s) )). | |
| 89 | :- assert_must_fail( test_transition('SIMP_COMPSET_IN', | |
| 90 | event_b_comprehension_set(['$'(x)],'$'(x),member('$'(x),set_extension(['$'(w),'$'(x),'$'(y)]))),_) ). | |
| 91 | :- assert_must_succeed(( test_transition('SIMP_TYPE_SUBSETEQ',subset('$'(s),bool_set),R),R=truth )). | |
| 92 | :- assert_must_succeed((test_transition('Evaluate tautology',subset(set_extension(['$'(red),'$'(blu)]),set_extension(['$'(blu),'$'(red)])),R), | |
| 93 | R=truth )). % SIMP_MULTI_SUBSETEQ | |
| 94 | :- assert_must_succeed(( test_transition('DERIV_SUBSETEQ_BUNION',subset(union(union('$'(r),'$'(b)),'$'(p)),'$'(c)),R), | |
| 95 | R=conjunct(conjunct(subset('$'(r),'$'(c)),subset('$'(b),'$'(c))),subset('$'(p),'$'(c))) )). | |
| 96 | :- assert_must_succeed(( test_transition('DERIV_SUBSETEQ_BINTER',subset('$'(c),intersection('$'(a),'$'(b))),R), | |
| 97 | R=conjunct(subset('$'(c),'$'(a)),subset('$'(c),'$'(b))) )). | |
| 98 | :- assert_must_succeed(( test_transition('SIMP_MULTI_SETENUM',set_extension(['$'(a),'$'(a),'$'(b),'$'(b)]),R), | |
| 99 | R=set_extension(['$'(a),'$'(b)]) )). | |
| 100 | :- assert_must_succeed(( test_transition('SIMP_SPECIAL_BINTER',intersection('$'(a),intersection(empty_set,'$'(w))),R), R=empty_set)). | |
| 101 | :- assert_must_succeed(( test_transition('SIMP_TYPE_BINTER',intersection('$'(a),intersection('INTEGER','$'(b))),R), | |
| 102 | R=intersection('$'(a),'$'(b)) )). | |
| 103 | :- assert_must_succeed(( test_transition('SIMP_TYPE_BUNION',union('$'(a),union(pow_subset(bool_set),'$'(b))),R), | |
| 104 | R=pow_subset(bool_set))). | |
| 105 | :- assert_must_succeed(( test_transition('SIMP_TYPE_SETMINUS',set_subtraction('$'(s),cartesian_product(bool_set,bool_set)),R), | |
| 106 | R=empty_set)). | |
| 107 | :- assert_must_succeed(( test_transition('SIMP_TYPE_SETMINUS_SETMINUS', | |
| 108 | set_subtraction(bool_set,set_subtraction(bool_set,'$'(s))),R), R='$'(s))). | |
| 109 | :- assert_must_succeed(( test_transition('SIMP_SPECIAL_CPROD',cartesian_product('$'(s),empty_set),R), R=empty_set )). | |
| 110 | :- assert_must_succeed(( test_transition('SIMP_SPECIAL_CPROD',cartesian_product(cartesian_product('$'(t),'$'(s)),empty_set),R), | |
| 111 | R=empty_set)). % SIMP_SPECIAL_CPROD_R, SIMP_SPECIAL_CPROD_L | |
| 112 | :- assert_must_succeed(( test_transition('SIMP_SPECIAL_OVERL',overwrite(empty_set,'$'(t)),R), R='$'(t) )). | |
| 113 | :- assert_must_succeed(( test_transition('SIMP_SPECIAL_OVERL',overwrite(overwrite('$'(t),'$'(s)),empty_set),R), | |
| 114 | R=overwrite('$'(t),'$'(s)) )). | |
| 115 | :- assert_must_succeed(( test_transition('SIMP_SPECIAL_OVERL',overwrite(overwrite(empty_set,'$'(t)),'$'(s)),R), | |
| 116 | R=overwrite('$'(t),'$'(s)) )). | |
| 117 | :- assert_must_succeed(( test_transition('SIMP_FINITE_BUNION',finite(union('$'(s),'$'(t))),R), R=conjunct(finite('$'(s)),finite('$'(t))) )). | |
| 118 | :- assert_must_succeed(( test_transition('SIMP_FINITE_CONVERSE',finite(reverse(set_extension([couple(1,2)]))),R), | |
| 119 | R=finite(set_extension([couple(1,2)])) )). | |
| 120 | :- assert_must_succeed(( test_transition('SIMP_FINITE_ID_DOMRES',finite(domain_restriction('$'(e),event_b_identity)),R), | |
| 121 | R=finite('$'(e)) )). | |
| 122 | :- assert_must_succeed(( test_transition('DISTRI_AND_OR',conjunct('$'(p),disjunct('$'(q),'$'(r))),R), | |
| 123 | R=disjunct(conjunct('$'(p),'$'(q)),conjunct('$'(p),'$'(r))) )). | |
| 124 | :- assert_must_succeed(( test_transition('DISTRI_AND_OR',conjunct(disjunct(disjunct('$'(q),'$'(s)),'$'(r)),'$'(t)),R), | |
| 125 | R=disjunct(disjunct(conjunct('$'(q),'$'(t)),conjunct('$'(s),'$'(t))),conjunct('$'(r),'$'(t))) )). | |
| 126 | :- assert_must_succeed(( test_transition('DEF_OR',disjunct(disjunct(disjunct('$'(q),'$'(s)),'$'(r)),'$'(t)),R), | |
| 127 | R=implication(negation('$'(q)),disjunct(disjunct('$'(s),'$'(r)),'$'(t))) )). | |
| 128 | :- assert_must_succeed(( test_transition('DISTRI_SUBSETEQ_BUNION_SING',subset(union('$'(s),set_extension(['$'(f)])),'$'(t)),R), | |
| 129 | R=conjunct(subset('$'(s),'$'(t)),member('$'(f),'$'(t))) )). | |
| 130 | :- assert_must_succeed(( test_transition('DISTRI_SUBSETEQ_BUNION_SING', | |
| 131 | subset(union(union('$'(s),set_extension(['$'(f)])),'$'(g)),'$'(t)),R), | |
| 132 | R=conjunct(conjunct(subset('$'(s),'$'(t)),member('$'(f),'$'(t))),subset('$'(g),'$'(t))) )). | |
| 133 | :- assert_must_succeed(( test_transition('SIMP_FINITE_NATURAL',disjunct('$'(p),finite(natural_set)),R), | |
| 134 | R=disjunct('$'(p),falsity))). % subterm | |
| 135 | :- assert_must_succeed(( test_transition('DEF_IN_MAPSTO',member(couple('$'(a),'$'(b)),cartesian_product('$'(n),'$'(m))),R), | |
| 136 | R=conjunct(member('$'(a),'$'(n)),member('$'(b),'$'(m))) )). | |
| 137 | :- assert_must_succeed(( test_transition('DEF_IN_MAPSTO', | |
| 138 | member(couple(couple('$'(a),'$'(b)),'$'(c)),cartesian_product(cartesian_product('$'(n),'$'(m)),'$'(o))),R), | |
| 139 | R=conjunct(member(couple('$'(a),'$'(b)),cartesian_product('$'(n),'$'(m))),member('$'(c),'$'(o))) )). | |
| 140 | :- assert_must_succeed(( test_transition('DEF_IN_POW',member(set_extension(['$'(a)]),pow_subset(natural1_set)),R), | |
| 141 | R=subset(set_extension(['$'(a)]),natural1_set) )). | |
| 142 | :- assert_must_succeed(( test_transition('DEF_IN_POW1',member(set_extension(['$'(a)]),pow1_subset(natural1_set)),R), | |
| 143 | R=conjunct(member(set_extension(['$'(a)]),pow_subset(natural1_set)),not_equal(natural1_set,empty_set)) )). | |
| 144 | :- assert_must_succeed(( test_transition('DEF_SUBSETEQ',subset('$'(s),'$'(t)),R), | |
| 145 | R=forall(['$'(x)],member('$'(x),'$'(s)),member('$'(x),'$'(t))) )). | |
| 146 | :- assert_must_succeed(( test_transition('DEF_SUBSETEQ',subset(set_extension(['$'(x)]),'$'(y)),R), | |
| 147 | R=forall(['$'(z)],member('$'(z),set_extension(['$'(x)])),member('$'(z),'$'(y))) )). % new identifier | |
| 148 | :- assert_must_succeed(( test_transition('DEF_IN_BUNION',member('$'(e),union('$'(x),'$'(y))),R), | |
| 149 | R=disjunct(member('$'(e),'$'(x)),member('$'(e),'$'(y))) )). | |
| 150 | :- assert_must_succeed(( test_transition('DEF_IN_BINTER',member('$'(e),intersection('$'(x),intersection('$'(y),'$'(z)))),R), | |
| 151 | R=conjunct(member('$'(e),'$'(x)),conjunct(member('$'(e),'$'(y)),member('$'(e),'$'(z)))) )). | |
| 152 | :- assert_must_succeed(( test_transition('DEF_IN_SETMINUS',member('$'(e),set_subtraction(set_extension(['$'(x)]),'$'(y))),R), | |
| 153 | R=conjunct(member('$'(e),set_extension(['$'(x)])),negation(member('$'(e),'$'(y)))) )). | |
| 154 | :- assert_must_succeed(( test_transition('DEF_IN_SETENUM',member('$'(e),set_extension([1,2,3])),R), | |
| 155 | R=disjunct(disjunct(equal('$'(e),1),equal('$'(e),2)),equal('$'(e),3)) )). | |
| 156 | :- assert_must_succeed(( test_transition('DEF_IN_KUNION',member(22,general_union('$'(s))),R), | |
| 157 | R=exists(['$'(x)],conjunct(member('$'(x),'$'(s)),member(22,'$'(x)))) )). | |
| 158 | :- assert_must_succeed(( test_transition('DEF_IN_KUNION',member(23,general_union('$'(x))),R), | |
| 159 | R=exists(['$'(y)],conjunct(member('$'(y),'$'(x)),member(23,'$'(y)))) )). | |
| 160 | :- assert_must_succeed(( test_transition('DISTRI_BINTER_SETMINUS',intersection('$'(a),set_subtraction('$'(s),'$'(t))),R), | |
| 161 | R=set_subtraction(intersection('$'(a),'$'(s)),intersection('$'(a),'$'(t))) )). | |
| 162 | :- assert_must_succeed(( test_transition('DISTRI_SETMINUS_BUNION',set_subtraction('$'(a),union('$'(s),'$'(t))),R), | |
| 163 | R=set_subtraction(set_subtraction('$'(a),'$'(s)),'$'(t)) )). | |
| 164 | :- assert_must_succeed(( test_transition('DERIV_SUBSETEQ_SETMINUS_L',subset(set_subtraction('$'(a),'$'(s)),'$'(t)),R), | |
| 165 | R=subset('$'(a),union('$'(s),'$'(t))) )). | |
| 166 | :- assert_must_succeed(( test_transition('SIMP_DOM_SETENUM',domain(set_extension([couple(1,2),couple(2,3)])),R), | |
| 167 | R=set_extension([1,2]) )). | |
| 168 | :- assert_must_succeed(( test_transition('SIMP_DOM_SETENUM',domain(set_extension([couple(1,2),couple(1,3)])),R), | |
| 169 | R=set_extension([1]) )). | |
| 170 | :- assert_must_succeed(( test_transition('SIMP_TYPE_OVERL_CPROD',overwrite(overwrite(overwrite('$'(r),'$'(s)),bool_set),'$'(t)),R), | |
| 171 | R=overwrite(bool_set,'$'(t)) )). | |
| 172 | :- assert_must_succeed(( test_transition('SIMP_TYPE_OVERL_CPROD',overwrite(overwrite(overwrite('$'(t),'$'(s)),'$'(r)),bool_set),R), | |
| 173 | R=bool_set )). | |
| 174 | :- assert_must_succeed(( test_transition('SIMP_TYPE_OVERL_CPROD',overwrite(overwrite(overwrite(bool_set,'$'(s)),bool_set),'$'(r)),R), | |
| 175 | R=overwrite(bool_set,'$'(r)) )). | |
| 176 | :- assert_must_succeed(( test_transition('SIMP_DPROD_CPROD', | |
| 177 | direct_product(cartesian_product('$'(a),'$'(b)),cartesian_product('$'(c),'$'(d))),R), | |
| 178 | R=cartesian_product(intersection('$'(a),'$'(c)),cartesian_product('$'(b),'$'(d))) )). | |
| 179 | :- assert_must_succeed(( test_transition('SIMP_PPROD_CPROD', | |
| 180 | parallel_product(cartesian_product('$'(s),'$'(t)),cartesian_product('$'(u),'$'(v))),R), | |
| 181 | R=cartesian_product(cartesian_product('$'(s),'$'(u)),cartesian_product('$'(t),'$'(v))) )). | |
| 182 | :- assert_must_succeed(( test_transition('SIMP_MULTI_RELIMAGE_CPROD_SING', | |
| 183 | image(cartesian_product(set_extension(['$'(e)]),'$'(s)),set_extension(['$'(e)])),R),R='$'(s) )). | |
| 184 | :- assert_must_succeed(( test_transition('SIMP_CONVERSE_SETENUM', | |
| 185 | reverse(set_extension([couple('$'(a),'$'(b)),couple('$'(c),'$'(d))])),R), | |
| 186 | R=set_extension([couple('$'(b),'$'(a)),couple('$'(d),'$'(c))]) )). | |
| 187 | :- assert_must_succeed(( test_transition('SIMP_SPECIAL_REL_R',partial_function('$'(s),empty_set),R),R=set_extension([empty_set]) )). | |
| 188 | :- assert_must_succeed(( test_transition('SIMP_SPECIAL_REL_R',surjection_relation('$'(s),empty_set),R), | |
| 189 | R=set_extension([empty_set]) )). | |
| 190 | :- assert_must_fail( test_transition('SIMP_SPECIAL_REL_R',total_relation('$'(s),empty_set),_) ). | |
| 191 | :- assert_must_succeed(( test_transition('SIMP_DOM_LAMBDA', | |
| 192 | domain(event_b_comprehension_set(['$'(x),'$'(y)],couple(add('$'(x),'$'(x)),'$'(y)),member(couple('$'(x),'$'(y)),'$'(p)))),R), | |
| 193 | R=event_b_comprehension_set(['$'(x),'$'(y)],add('$'(x),'$'(x)),member(couple('$'(x),'$'(y)),'$'(p))) )). | |
| 194 | :- assert_must_fail( test_transition('SIMP_DOM_LAMBDA', | |
| 195 | domain(event_b_comprehension_set(['$'(x),'$'(y)],add('$'(x),'$'(x)),member(couple('$'(x),'$'(y)),'$'(p)))),_) ). | |
| 196 | :- assert_must_succeed(( test_transition('SIMP_MULTI_FUNIMAGE_SETENUM_LL',function(set_extension([couple('$'(a),1)]),'$'(x)),R), | |
| 197 | R=1)). | |
| 198 | :- assert_must_succeed(( test_transition('SIMP_MULTI_FUNIMAGE_SETENUM_LL', | |
| 199 | function(set_extension([couple(1,1),couple(2,1),couple(3,1)]),1),R),R=1 )). | |
| 200 | :- assert_must_fail( test_transition('SIMP_MULTI_FUNIMAGE_SETENUM_LL', | |
| 201 | function(set_extension([couple(1,1),couple(2,2),couple(3,1)]),1),_) ). | |
| 202 | :- assert_must_succeed(( test_transition('SIMP_MULTI_FUNIMAGE_SETENUM_LR', | |
| 203 | function(set_extension([couple(1,1),couple(2,3),couple(4,5)]),2),R),R=3 )). | |
| 204 | :- assert_must_succeed(( test_transition('SIMP_MULTI_FUNIMAGE_SETENUM_LR', | |
| 205 | function(set_extension([couple(add('$'(x),1),'$'(y))]),add(1,'$'(x))),R),R='$'(y) )). | |
| 206 | :- assert_must_succeed(( test_transition('SIMP_MULTI_FUNIMAGE_OVERL_SETENUM', | |
| 207 | function(overwrite(overwrite('$'(r),'$'(s)),set_extension([couple('$'(x),'$'(y))])),'$'(x)),R),R='$'(y) )). | |
| 208 | :- assert_must_succeed(( test_transition('SIMP_MULTI_FUNIMAGE_BUNION_SETENUM', | |
| 209 | function(union(union('$'(r),'$'(s)),set_extension([couple(1,2),couple(2,'$'(x))])),2),R),R='$'(x) )). | |
| 210 | :- assert_must_succeed(( test_transition('SIMP_MULTI_FUNIMAGE_BUNION_SETENUM', | |
| 211 | function(union(set_extension([couple(1,2),couple(2,'$'(x))]),union('$'(r),'$'(s))),2),R),R='$'(x) )). | |
| 212 | :- assert_must_succeed(( test_transition('SIMP_FUNIMAGE_FUNIMAGE_CONVERSE_SETENUM', | |
| 213 | 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), | |
| 214 | R='$'(x) )). | |
| 215 | :- assert_must_succeed(( test_transition_with_hyps('SIMP_FUNIMAGE_DOMRES',[member('$'(f),total_function('$'(a),'$'(b)))], | |
| 216 | function(domain_restriction('$'(e),'$'(f)),'$'(g)),R), | |
| 217 | R=function('$'(f),'$'(g)) )). | |
| 218 | :- assert_must_succeed(( test_transition('DEF_EQUAL_FUNIMAGE',equal(function('$'(f),'$'(x)),'$'(y)),R), | |
| 219 | R=member(couple('$'(x),'$'(y)),'$'(f)) )). | |
| 220 | :- assert_must_succeed(( test_transition('DEF_EQUAL_FUNIMAGE',equal(function('$'(f),couple('$'(x),'$'(z))),'$'(y)),R), | |
| 221 | R=member(couple(couple('$'(x),'$'(z)),'$'(y)),'$'(f)) )). | |
| 222 | :- assert_must_succeed(( test_transition('DEF_BCOMP',ring(ring(ring('$'(a),'$'(b)),'$'(c)),'$'(d)),R), | |
| 223 | R=composition(composition(composition('$'(d),'$'(c)),'$'(b)),'$'(a)) )). | |
| 224 | :- assert_must_succeed(( test_transition('DERIV_FCOMP_SING', | |
| 225 | composition(set_extension([couple('$'(e),'$'(f))]),set_extension([couple('$'(f),'$'(g))])),R), R=set_extension([couple('$'(e),'$'(g))]) )). | |
| 226 | :- assert_must_succeed(( test_transition('DEF_IN_DOM',member('$'(a),domain('$'(r))),R), | |
| 227 | R=exists(['$'(x)],member(couple('$'(a),'$'(x)),'$'(r))) )). | |
| 228 | :- assert_must_succeed(( test_transition('DEF_IN_DOM',member('$'(x),domain('$'(r))),R), | |
| 229 | R=exists(['$'(y)],member(couple('$'(x),'$'(y)),'$'(r))) )). | |
| 230 | :- assert_must_succeed(( test_transition('DEF_IN_DOM',member('$'(a),domain(set_extension([couple(1,'$'(x))]))),R), | |
| 231 | R=exists(['$'(y)],member(couple('$'(a),'$'(y)),set_extension([couple(1,'$'(x))]))) )). | |
| 232 | :- assert_must_succeed(( test_transition('DEF_IN_FCOMP', | |
| 233 | member(couple('$'(a),'$'(b)),composition(event_b_identity,set_extension([couple(0,1)]))),R), | |
| 234 | R=exists(['$'(x)],conjunct(member(couple('$'(a),'$'(x)),event_b_identity),member(couple('$'(x),'$'(b)),set_extension([couple(0,1)])))))). | |
| 235 | :- assert_must_succeed(( test_transition('DEF_IN_FCOMP',member(couple('$'(a),'$'(x)),composition(composition('$'(r),'$'(s)),'$'(t))),R), | |
| 236 | R=exists(['$'(y1),'$'(y2)],conjunct(conjunct(member(couple('$'(a),'$'(y1)),'$'(r)), | |
| 237 | member(couple('$'(y1),'$'(y2)),'$'(s))),member(couple('$'(y2),'$'(x)),'$'(t)))) )). | |
| 238 | :- assert_must_succeed(( test_transition('DISTRI_DPROD_BUNION',direct_product('$'(r),union('$'(s),'$'(t))),R), | |
| 239 | R=union(direct_product('$'(r),'$'(s)),direct_product('$'(r),'$'(t))) )). % distri_r | |
| 240 | :- assert_must_fail( test_transition('DISTRI_DPROD_BUNION',direct_product(union('$'(s),'$'(t)),'$'(r)),_) ). | |
| 241 | :- assert_must_succeed(( test_transition('DISTRI_OVERL_BUNION_L',overwrite(union('$'(p),'$'(q)),'$'(r)),R), | |
| 242 | R=union(overwrite('$'(p),'$'(r)),overwrite('$'(q),'$'(r))) )). % distri_l | |
| 243 | :- assert_must_fail( test_transition('DISTRI_OVERL_BUNION_L',overwrite('$'(r),union('$'(p),'$'(q))),_) ). | |
| 244 | :- assert_must_succeed(( test_transition('DISTRI_DOMSUB_BUNION_L',domain_subtraction(union('$'(p),'$'(q)),'$'(r)),R), | |
| 245 | R=intersection(domain_subtraction('$'(p),'$'(r)),domain_subtraction('$'(q),'$'(r))) )). | |
| 246 | :- assert_must_succeed(( test_transition('DISTRI_CONVERSE_BUNION',reverse(union(union('$'(r),'$'(b)),'$'(p))),R), | |
| 247 | R=union(union(reverse('$'(r)),reverse('$'(b))),reverse('$'(p))) )). | |
| 248 | :- assert_must_succeed(( test_transition('DISTRI_CONVERSE_FCOMP', | |
| 249 | reverse(composition('$'(r),'$'(b))),R), R=composition(reverse('$'(b)),reverse('$'(r))) )). | |
| 250 | :- assert_must_succeed(( test_transition('DISTRI_RAN_BUNION',range(union(union('$'(r),'$'(b)),'$'(c))),R), | |
| 251 | R=union(union(range('$'(r)),range('$'(b))),range('$'(c))) )). | |
| 252 | :- assert_must_succeed(( test_transition_with_hyps('DERIV_DOM_TOTALREL',[member('$'(r),total_function('$'(a),'$'(b)))], | |
| 253 | equal('$'(f),domain('$'(r))),R), R=equal('$'(f),'$'(a)) )). | |
| 254 | :- assert_must_fail( test_transition_with_hyps('DERIV_DOM_TOTALREL',[member('$'(r),relations('$'(a),'$'(b)))], | |
| 255 | equal('$'(f),domain('$'(r))),_) ). | |
| 256 | :- assert_must_succeed(( test_transition('DERIV_MULTI_IN_BUNION',member('$'(r),union('$'(a),set_extension(['$'(r)]))),R), R=truth )). | |
| 257 | :- assert_must_succeed(( test_transition('SIMP_SETMINUS_EQUAL_EMPTY',equal(empty_set,set_subtraction('$'(r),'$'(a))),R), | |
| 258 | R=subset('$'(r),'$'(a)) )). | |
| 259 | :- assert_must_succeed(( test_transition('SIMP_SETMINUS_EQUAL_EMPTY',equal(set_subtraction('$'(r),'$'(a)),empty_set),R), | |
| 260 | R=subset('$'(r),'$'(a)) )). | |
| 261 | :- assert_must_succeed(( test_transition('SIMP_SETMINUS_EQUAL_EMPTY',subset(set_subtraction('$'(r),'$'(a)),empty_set),R), | |
| 262 | R=subset('$'(r),'$'(a)) )). | |
| 263 | :- assert_must_succeed(( test_transition('SIMP_FCOMP_EQUAL_EMPTY',equal(empty_set,composition('$'(r),'$'(a))),R), | |
| 264 | R=equal(intersection(range('$'(r)),domain('$'(a))),empty_set) )). | |
| 265 | :- assert_must_succeed(( test_transition('SIMP_OVERL_EQUAL_EMPTY',equal(empty_set,overwrite(overwrite('$'(r),'$'(a)),'$'(b))),R), | |
| 266 | R=conjunct(conjunct(equal('$'(r),empty_set),equal('$'(a),empty_set)),equal('$'(b),empty_set)) )). | |
| 267 | :- assert_must_succeed(( test_transition('SIMP_MIN_BUNION_SING',min(union('$'(s),set_extension([min('$'(t))]))),R), | |
| 268 | R=min(union('$'(s),'$'(t))) )). | |
| 269 | :- assert_must_succeed(( test_transition('SIMP_LIT_MIN',min(set_extension(['$'(a),'$'(t),3,0,1])),R),R=min(set_extension(['$'(a),'$'(t),0])))). | |
| 270 | :- assert_must_succeed(( test_transition_with_hyps('SIMP_CARD_SETMINUS',[finite('$'(s)),subset('$'(t),'$'(s))], | |
| 271 | not_equal(0,card(set_subtraction('$'(s),'$'(t)))),R), R=not_equal(0,minus(card('$'(s)),card('$'(t)))) )). | |
| 272 | :- assert_must_succeed(( test_transition_with_hyps('SIMP_CARD_SETMINUS_SETENUM', | |
| 273 | [member('$'(e),'$'(s)),member('$'(f),'$'(s)),member('$'(g),'$'(s))], | |
| 274 | not_equal(0,card(set_subtraction('$'(s),set_extension(['$'(e),'$'(f),'$'(g)])))),R), | |
| 275 | R=not_equal(0,minus(card('$'(s)),card(set_extension(['$'(e),'$'(f),'$'(g)])))) )). | |
| 276 | :- assert_must_succeed(( test_transition('SIMP_LIT_CARD_UPTO',card(interval(1,2)),R), R=2 )). | |
| 277 | :- assert_must_fail( test_transition('SIMP_LIT_CARD_UPTO',card(interval(2,'$'(drei))),_) ). | |
| 278 | :- assert_must_succeed(( test_transition('DERIV_NOT_EQUAL',not_equal('$'(e),1),R), R=disjunct(greater('$'(e),1),less('$'(e),1)) )). | |
| 279 | :- assert_must_fail( test_transition('DERIV_NOT_EQUAL',not_equal('$'(e),'$'(f)),_) ). | |
| 280 | :- assert_must_succeed(( test_transition_with_hyps('DERIV_NOT_EQUAL',[member('$'(f),natural_set)],not_equal('$'(e),'$'(f)),R), | |
| 281 | R=disjunct(greater('$'(f),'$'(e)),less('$'(f),'$'(e))) )). | |
| 282 | :- assert_must_succeed(( test_transition('SIMP_SPECIAL_PROD_0',multiplication(multiplication('$'(i),0),'$'(e)),R), R=0 )). | |
| 283 | :- assert_must_succeed(( test_transition('SIMP_SPECIAL_PROD_1',multiplication(multiplication('$'(i),1),'$'(e)),R), R=multiplication('$'(i),'$'(e)) )). | |
| 284 | :- assert_must_succeed(( test_transition('SIMP_SPECIAL_PROD_MINUS_ODD', | |
| 285 | multiplication(multiplication(unary_minus('$'(i)),1),'$'(e)),R), R=unary_minus(multiplication(multiplication('$'(i),1),'$'(e))) )). | |
| 286 | :- assert_must_succeed(( test_transition('SIMP_SPECIAL_PROD_MINUS_ODD', | |
| 287 | multiplication(multiplication('$'(i),-1),'$'(e)),R), R=unary_minus(multiplication(multiplication('$'(i),1),'$'(e))) )). | |
| 288 | :- assert_must_succeed(( test_transition('SIMP_SPECIAL_PROD_MINUS_EVEN', | |
| 289 | multiplication(multiplication(unary_minus('$'(i)),-1),'$'(e)),R), R=multiplication(multiplication('$'(i),1),'$'(e)) )). | |
| 290 | :- assert_must_succeed(( test_transition('SIMP_LIT_MINUS',unary_minus(1),R), R= -1 )). | |
| 291 | :- assert_must_fail( test_transition('SIMP_LIT_MINUS',unary_minus('$'(a)),_) ). | |
| 292 | :- assert_must_succeed(( test_transition('SIMP_LIT_GT',greater(1,1),R), R=falsity )). | |
| 293 | :- assert_must_succeed(( test_transition('SIMP_LIT_GT',greater(2,1),R), R=truth )). | |
| 294 | :- assert_must_succeed(( test_transition('SIMP_DIV_MINUS',div(-12,unary_minus('$'(x))),R), R=div(12,'$'(x)) )). | |
| 295 | :- assert_must_succeed(( test_transition('SIMP_MULTI_LT',less(0,multiplication(1000000,0)),R), R=falsity )). | |
| 296 | :- assert_must_succeed(( test_transition('Evaluate tautology',less_equal(0,multiplication(1000,0)),R), R=truth )). % SIMP_MULTI_LE | |
| 297 | :- assert_must_succeed(( test_transition('SIMP_MULTI_DIV_PROD', | |
| 298 | equal(1,div(multiplication(multiplication('$'(y),'$'(e)),'$'(x)),'$'(e))),R), R=equal(1,multiplication('$'(y),'$'(x))) )). | |
| 299 | :- assert_must_succeed(( test_transition('Evaluate tautology',member(0,'NATURAL'),R), R=truth )). % SIMP_LIT_IN_NATURAL | |
| 300 | :- assert_must_fail( test_transition('Evaluate tautology',member(-1,'NATURAL'),_) ). | |
| 301 | :- assert_must_succeed(( test_transition('Evaluate tautology',member(1,'NATURAL1'),R), R=truth )). % SIMP_LIT_IN_NATURAL1 | |
| 302 | :- assert_must_fail( test_transition('Evaluate tautology',member(0,'NATURAL1'),_) ). | |
| 303 | :- assert_must_succeed(( test_transition('SIMP_LIT_UPTO',interval(1,0),R),R=empty_set )). | |
| 304 | :- assert_must_fail( test_transition('SIMP_LIT_UPTO',interval(0,0),_) ). | |
| 305 | :- assert_must_succeed(( test_transition('SIMP_LIT_IN_MINUS_NATURAL',member(unary_minus(1),natural_set),R),R=falsity )). | |
| 306 | :- assert_must_succeed(( test_transition('SIMP_LIT_IN_MINUS_NATURAL',member(-1,natural_set),R),R=falsity )). | |
| 307 | :- assert_must_succeed(( test_transition('SIMP_MINUS_MINUS',unary_minus(unary_minus('$'(e))),R),R='$'(e) )). | |
| 308 | :- assert_must_succeed(( test_transition('SIMP_MINUS_MINUS',unary_minus(-13),R),R=13 )). | |
| 309 | ||
| 310 | ||
| 311 | :- assert_must_succeed(( test_transition(fun_image_goal, | |
| 312 | sequent([member('$'(f),partial_function(natural_set,bool_set))],equal('$'(t),function('$'(f),'$'(e))),success),R), | |
| 313 | R= sequent([member('$'(f),partial_function(natural_set,bool_set)),member(function('$'(f),'$'(e)),bool_set)], % new Hyp | |
| 314 | equal('$'(t),function('$'(f),'$'(e))),success) )). | |
| 315 | :- assert_must_succeed(( test_transition(subset_inter, | |
| 316 | sequent([subset('$'(x),'$'(u))],equal(intersection('$'(x),'$'(u)),empty_set),success),R), | |
| 317 | R= sequent([subset('$'(x),'$'(u))],equal('$'(x),empty_set),success) )). | |
| 318 | :- assert_must_succeed(( test_transition(in_inter, | |
| 319 | sequent([member('$'(e),'$'(t))],equal(intersection('$'(t),set_extension(['$'(e)])),empty_set),success),R), | |
| 320 | R= sequent([member('$'(e),'$'(t))],equal(set_extension(['$'(e)]),empty_set),success) )). | |
| 321 | :- assert_must_succeed(( test_transition(deriv_equal_card, | |
| 322 | sequent([equal('$'(s),set_extension([1,2])),equal('$'(t),set_extension([3,4]))],equal(card('$'(s)),card('$'(t))),success),R), | |
| 323 | R= sequent([equal('$'(s),set_extension([1,2])),equal('$'(t),set_extension([3,4]))],equal('$'(s),'$'(t)),success))). | |
| 324 | :- assert_must_fail( test_transition(deriv_equal_card, | |
| 325 | sequent([equal('$'(s),set_extension([1])),equal('$'(t),set_extension([boolean_false]))],equal(card('$'(s)),card('$'(t))),success),_) ). | |
| 326 | :- assert_must_succeed(( test_transition(deriv_le_card, | |
| 327 | sequent([member('$'(s),pow1_subset(integer_set)),subset('$'(t),natural1_set)],less_equal(card('$'(s)),card('$'(t))),success),R), | |
| 328 | R= sequent([member('$'(s),pow1_subset(integer_set)),subset('$'(t),natural1_set)],subset('$'(s),'$'(t)),success))). | |
| 329 | :- assert_must_fail( test_transition(deriv_le_card, | |
| 330 | sequent([subset('$'(s),bool_set),subset('$'(t),natural1_set)],less_equal(card('$'(s)),card('$'(t))),success),_) ). | |
| 331 | ||
| 332 | :- assert_must_succeed(( test_transition('SIMP_TYPE_FCOMP_R',composition('$'(r),cartesian_product(integer_set,bool_set)),R), | |
| 333 | R=cartesian_product(domain('$'(r)),bool_set) )). | |
| 334 | :- assert_must_fail( test_transition('SIMP_TYPE_FCOMP_R',composition('$'(r),pow_subset(integer_set,bool_set)),_) ). | |
| 335 | :- assert_must_succeed(( test_transition('SIMP_TYPE_FCOMP_R',composition('$'(r),cartesian_product(integer_set,bool_set)),R), | |
| 336 | R=cartesian_product(domain('$'(r)),bool_set) )). | |
| 337 | :- assert_must_fail( test_transition('SIMP_TYPE_FCOMP_R',composition('$'(r),pow_subset(integer_set,bool_set)),_) ). | |
| 338 | :- assert_must_succeed(( test_transition('SIMP_TYPE_DOM',domain(cartesian_product(integer_set,bool_set)),R), | |
| 339 | R=integer_set )). | |
| 340 | :- assert_must_succeed(( test_transition('SIMP_TYPE_DOM',domain(cartesian_product(cartesian_product(integer_set,bool_set),bool_set)),R), | |
| 341 | R=cartesian_product(integer_set,bool_set) )). | |
| 342 | :- assert_must_succeed(( test_transition('SIMP_TYPE_RAN',range(cartesian_product(integer_set,bool_set)),R), | |
| 343 | R=bool_set )). | |
| 344 | :- assert_must_succeed(( test_transition('SIMP_COMPSET_EQUAL', | |
| 345 | event_b_comprehension_set(['$'(x),'$'(y)],couple('$'(x),'$'(y)),conjunct(member('$'(y),natural_set),equal('$'(x),1))),R), | |
| 346 | R=event_b_comprehension_set(['$'(y)],couple(1,'$'(y)),member('$'(y),natural_set)) )). | |
| 347 | :- assert_must_succeed(( test_transition('SIMP_COMPSET_EQUAL', | |
| 348 | event_b_comprehension_set(['$'(x),'$'(y)],couple('$'(x),'$'(y)),conjunct(member('$'(x),natural_set),equal('$'(y),1))),R), | |
| 349 | R=event_b_comprehension_set(['$'(x)],couple('$'(x),1),member('$'(x),natural_set)) )). | |
| 350 | :- assert_must_succeed(( test_transition('SIMP_COMPSET_EQUAL', | |
| 351 | event_b_comprehension_set(['$'(x),'$'(y),'$'(z)],couple(couple('$'(x),'$'(z)),'$'(y)), | |
| 352 | conjunct(member('$'(y),natural_set),equal(couple('$'(x),'$'(z)),'$'(e)))),R), | |
| 353 | R=event_b_comprehension_set(['$'(y)],couple('$'(e),'$'(y)),member('$'(y),natural_set)) )). | |
| 354 | :- assert_must_succeed(( test_transition('SIMP_IN_COMPSET', | |
| 355 | member('$'(f),event_b_comprehension_set(['$'(x),'$'(y)],add('$'(x),'$'(y)), | |
| 356 | conjunct(member('$'(x),natural_set),member('$'(y),natural_set)))),R), | |
| 357 | R=exists(['$'(x),'$'(y)],conjunct(conjunct(member('$'(x),natural_set),member('$'(y),natural_set)),equal(add('$'(x),'$'(y)),'$'(f)))) )). | |
| 358 | :- assert_must_fail( test_transition('SIMP_IN_COMPSET_ONEPOINT', | |
| 359 | member('$'(a),event_b_comprehension_set(['$'(x)],couple('$'(x),add('$'(x),1)),member('$'(x),set_extension([3,12])))),_) ). | |
| 360 | :- assert_must_succeed(( test_transition('SIMP_IN_COMPSET_ONEPOINT', | |
| 361 | member('$'(a),event_b_comprehension_set(['$'(x)],'$'(x),member('$'(x),set_extension([3,12])))),R), | |
| 362 | R=member('$'(a),set_extension([3,12])) )). | |
| 363 | :- assert_must_succeed(( test_transition('SIMP_IN_COMPSET_ONEPOINT', | |
| 364 | member(couple('$'(a),'$'(b)),event_b_comprehension_set(['$'(x),'$'(y)],couple('$'(x),'$'(y)), | |
| 365 | conjunct(member('$'(x),natural_set),member('$'(y),natural_set)))),R), | |
| 366 | R=conjunct(member('$'(a),natural_set),member('$'(b),natural_set)) )). | |
| 367 | :- assert_must_fail( test_transition('SIMP_IN_COMPSET_ONEPOINT',member('$'(a), | |
| 368 | event_b_comprehension_set(['$'(x),'$'(y)],'$'(x),conjunct(member('$'(x),natural_set),member('$'(y),natural_set)))),_) ). | |
| 369 | :- assert_must_succeed(( test_transition('SIMP_FUNIMAGE_LAMBDA', | |
| 370 | equal(5,function(event_b_comprehension_set(['$'(x)],couple('$'(x),add('$'(x),1)),member('$'(x),natural_set)),'$'(y))),R), | |
| 371 | R=equal(5,add('$'(y),1)) )). | |
| 372 | :- assert_must_succeed(( test_transition('SIMP_FINITE_LAMBDA', | |
| 373 | finite(event_b_comprehension_set(['$'(x)],couple('$'(x),add('$'(x),1)),member('$'(x),'$'(set)))),R), | |
| 374 | R=finite(event_b_comprehension_set(['$'(x)],'$'(x),member('$'(x),'$'(set)))) )). | |
| 375 | :- assert_must_fail( test_transition('SIMP_FINITE_LAMBDA', | |
| 376 | finite(event_b_comprehension_set(['$'(x),'$'(y)],couple('$'(x),'$'(y)), | |
| 377 | conjunct(member('$'(x),'$'(set)),member('$'(y),'$'(set))))),_) ). | |
| 378 | :- assert_must_fail( test_transition('SIMP_FINITE_LAMBDA', | |
| 379 | finite(event_b_comprehension_set(['$'(x)],couple(1,'$'(x)),member('$'(x),'$'(set)))),_) ). | |
| 380 | :- assert_must_succeed(( test_transition('SIMP_FINITE_LAMBDA', | |
| 381 | finite(event_b_comprehension_set(['$'(x)],couple('$'(x),1),member('$'(x),'$'(set)))),R), | |
| 382 | R=finite(event_b_comprehension_set(['$'(x)],'$'(x),member('$'(x),'$'(set)))) )). | |
| 383 | :- assert_must_succeed(( test_transition('DERIV_FCOMP_DOMRES', | |
| 384 | composition(domain_restriction('$'(s),'$'(p)),'$'(q)),R),R=domain_restriction('$'(s),composition('$'(p),'$'(q))) )). | |
| 385 | :- assert_must_succeed(( test_transition('DERIV_FCOMP_DOMSUB', | |
| 386 | composition('$'(t),composition(domain_subtraction('$'(s),'$'(p)),'$'(q))),R), | |
| 387 | R=composition('$'(t),domain_subtraction('$'(s),composition('$'(p),'$'(q)))) )). | |
| 388 | :- assert_must_fail( test_transition('DERIV_FCOMP_RANRES',composition(range_restriction('$'(s),'$'(p)),'$'(q)),_) ). | |
| 389 | :- assert_must_succeed(( test_transition('DERIV_FCOMP_RANRES', | |
| 390 | composition('$'(p),range_restriction('$'(q),'$'(s))),R), | |
| 391 | R=range_restriction(composition('$'(p),'$'(q)),'$'(s)) )). | |
| 392 | :- assert_must_succeed(( test_transition('SIMP_BCOMP_ID', | |
| 393 | ring(ring(ring('$'(r),domain_restriction('$'(s),event_b_identity)),domain_restriction('$'(t),event_b_identity)),'$'(o)),R), | |
| 394 | R=ring(ring('$'(r),domain_restriction(intersection('$'(s),'$'(t)),event_b_identity)),'$'(o)) )). | |
| 395 | :- assert_must_succeed(( test_transition('SIMP_BCOMP_ID', | |
| 396 | ring(ring(domain_restriction('$'(s),event_b_identity),domain_subtraction('$'(t),event_b_identity)),'$'(r)),R), | |
| 397 | R=ring(domain_restriction(set_subtraction('$'(s),'$'(t)),event_b_identity),'$'(r)) )). | |
| 398 | :- assert_must_succeed(( test_transition('SIMP_BCOMP_ID', | |
| 399 | ring(ring(domain_subtraction('$'(s),event_b_identity),domain_subtraction('$'(t),event_b_identity)),'$'(r)),R), | |
| 400 | R=ring(domain_subtraction(union('$'(s),'$'(t)),event_b_identity),'$'(r)) )). | |
| 401 | :- assert_must_succeed(( test_transition('SIMP_FCOMP_ID', | |
| 402 | composition(composition(domain_restriction('$'(s),event_b_identity), | |
| 403 | domain_restriction('$'(t),event_b_identity)),domain_subtraction('$'(q),event_b_identity)),R), | |
| 404 | R=domain_restriction(set_subtraction(intersection('$'(s),'$'(t)),'$'(q)),event_b_identity) )). | |
| 405 | :- assert_must_succeed(( test_transition('DISTRI_RANSUB_BUNION_R', | |
| 406 | range_subtraction('$'(r),union('$'(s),'$'(t))),R), | |
| 407 | R=intersection(range_subtraction('$'(r),'$'(s)),range_subtraction('$'(r),'$'(t))) )). | |
| 408 | :- assert_must_succeed(( test_transition('DISTRI_RANSUB_BUNION_L', | |
| 409 | range_subtraction(union('$'(s),'$'(t)),'$'(r)),R), | |
| 410 | R=union(range_subtraction('$'(s),'$'(r)),range_subtraction('$'(t),'$'(r))) )). | |
| 411 | :- assert_must_succeed(( test_transition('DISTRI_RANSUB_BINTER_R', | |
| 412 | range_subtraction('$'(r),intersection(intersection('$'(s),'$'(t)),'$'(u))),R), | |
| 413 | R=union(union(range_subtraction('$'(r),'$'(s)),range_subtraction('$'(r),'$'(t))),range_subtraction('$'(r),'$'(u))) )). | |
| 414 | ||
| 415 | :- assert_must_succeed(( test_transition_with_types('DERIV_EQUAL',[subset('$'(s),natural_set),subset('$'(t),natural_set)], | |
| 416 | equal('$'(s),'$'(t)),R), R=conjunct(subset('$'(s),'$'(t)),subset('$'(t),'$'(s))) )). | |
| 417 | :- assert_must_succeed(( test_transition_with_types('DERIV_EQUAL',[equal('$'(s),natural_set)],equal('$'(s),set_extension([4])),R), | |
| 418 | R=conjunct(subset('$'(s),set_extension([4])),subset(set_extension([4]),'$'(s))) )). | |
| 419 | :- assert_must_succeed(( test_transition_with_types('DERIV_EQUAL',[member('$'(s),pow_subset(bool_set))], | |
| 420 | equal(set_extension([boolean_true]),'$'(s)),R), | |
| 421 | R=conjunct(subset(set_extension([boolean_true]),'$'(s)),subset('$'(s),set_extension([boolean_true]))) )). | |
| 422 | :- assert_must_succeed(( test_transition_with_types('DERIV_EQUAL',[],equal(set_extension([1]),set_extension([1])),R), | |
| 423 | R=conjunct(subset(set_extension([1]),set_extension([1])),subset(set_extension([1]),set_extension([1]))) )). | |
| 424 | :- assert_must_succeed(( test_transition_with_types('DERIV_SUBSETEQ',[subset('$'(s),natural_set),subset('$'(t),natural_set)], | |
| 425 | subset('$'(s),'$'(t)),R),R=subset(set_subtraction('INTEGER','$'(t)),set_subtraction('INTEGER','$'(s))) )). | |
| 426 | ||
| 427 | :- assert_must_fail( sequent_prover:wd_strict_term(conjunct(truth,equal(1,1))) ). | |
| 428 | :- assert_must_succeed(( sequent_prover:wd_strict_term(equivalence(truth,equal(1,1))) )). | |
| 429 | :- assert_must_succeed(( sequent_prover:rewrite_once('$'(x),'$'(y),equal('$'(x),'$'(x)),R), R=equal('$'(y),'$'(x)) )). | |
| 430 | :- assert_must_succeed(( sequent_prover:is_subterm(equal(_,_),conjunct(truth,equal('$'(x),'$'(x)))) )). | |
| 431 | :- assert_must_succeed(( sequent_prover:split_composition(composition('$'(f),'$'(g)),L,R), L='$'(f), R='$'(g) )). | |
| 432 | :- assert_must_succeed(( sequent_prover:split_composition(composition(composition('$'(f),'$'(g)),'$'(h)),composition('$'(f),'$'(g)),'$'(h)) )). | |
| 433 | :- assert_must_succeed(( sequent_prover:split_composition(composition(composition('$'(f),'$'(g)),'$'(h)),'$'(f),composition('$'(g),'$'(h))) )). |