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))) )).