Advertisement
Guest User

Untitled

a guest
Jun 9th, 2017
1,400
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 26.66 KB | None | 0 0
  1. % Copyright 2012-2015 Consortium of the BWare ANR Project (ANR-12-INSE-0010)
  2. % <http://bware.lri.fr/>
  3. % Copyright 2012-2015 Cedric (CPR Team)
  4. % David DELAHAYE
  5. % <david.delahaye@cnam.fr>
  6. % Copyright 2012-2015 LRI (VALS team)
  7. % Sylvain CONCHON
  8. % <sylvain.conchon@lri.fr>
  9. % Copyright 2012-2015 Inria (Gallium, Deducteam)
  10. % Damien DOLIGEZ
  11. % <damien.doligez@inria.fr>
  12. % Copyright 2012-2015 Mitsubishi Electric R&D Centre Europe
  13. % David MENTRE
  14. % <d.mentre@fr.merce.mee.com>
  15. % Copyright 2012-2015 ClearSy
  16. % Thierry LECOMTE
  17. % <thierry.lecomte@clearsy.com>
  18. % Copyright 2012-2015 OCamlPro
  19. % Fabrice LE FESSANT
  20. % <fabrice.le_fessant@ocamlpro.com>
  21. %
  22. % This file is a free software.
  23. %
  24. % This software is governed by the CeCILL-B license under French law and
  25. % abiding by the rules of distribution of free software.
  26. % You can use, modify and/or redistribute the software under the terms of the
  27. % CeCILL-B license as circulated by CEA, CNRS and INRIA at the following URL
  28. % "http://www.cecill.info".
  29. %
  30. % As a counterpart to the access to the source code and rights to copy,
  31. % modify and redistribute granted by the license, users are provided only
  32. % with a limited warranty and the software's author, the holder of the
  33. % economic rights, and the successive licensors have only limited liability.
  34. %
  35. % In this respect, the user's attention is drawn to the risks associated
  36. % with loading, using, modifying and/or developing or reproducing the
  37. % software by the user in light of its specific status of free software,
  38. % that may mean that it is complicated to manipulate, and that also
  39. % therefore means that it is reserved for developers and experienced
  40. % professionals having in-depth computer knowledge. Users are therefore
  41. % encouraged to load and test the software's suitability as regards their
  42. % requirements in conditions enabling the security of their systems and/or
  43. % data to be ensured and, more generally, to use and operate it in the
  44. % same conditions as regards security.
  45. %
  46. % The fact that you are presently reading this means that you have had
  47. % knowledge of the CeCILL-B license and that you accept its terms.
  48. %
  49. % ------------------------------------------------------------------------------
  50.  
  51. tff(bool, type, bool: $tType).
  52.  
  53. tff(true, type, true: bool).
  54.  
  55. tff(false, type, false: bool).
  56.  
  57. tff(match_bool, type, match_bool: !>[A : $tType]: ((bool * A * A) > A)).
  58.  
  59. tff(match_bool_True, axiom, ![A : $tType]: ![Z:A, Z1:A]: (match_bool(A, true,
  60. Z, Z1) = Z)).
  61.  
  62. tff(match_bool_False, axiom, ![A : $tType]: ![Z:A, Z1:A]:
  63. (match_bool(A, false, Z, Z1) = Z1)).
  64.  
  65. tff(true_False, axiom, ~ (true = false)).
  66.  
  67. tff(bool_inversion, axiom, ![U:bool]: ((U = true) | (U = false))).
  68.  
  69. tff(andb, type, andb: (bool * bool) > bool).
  70.  
  71. tff(andb_def, axiom, ![Y:bool]: ((andb(true, Y) = Y) & (andb(false,
  72. Y) = false))).
  73.  
  74. tff(orb, type, orb: (bool * bool) > bool).
  75.  
  76. tff(orb_def, axiom, ![Y:bool]: ((orb(true, Y) = true) & (orb(false,
  77. Y) = Y))).
  78.  
  79. tff(xorb, type, xorb: (bool * bool) > bool).
  80.  
  81. tff(xorb_def, axiom, (((xorb(true, true) = false) & (xorb(false,
  82. true) = true)) & ((xorb(true, false) = true) & (xorb(false,
  83. false) = false)))).
  84.  
  85. tff(notb, type, notb: bool > bool).
  86.  
  87. tff(notb_def, axiom, ((notb(true) = false) & (notb(false) = true))).
  88.  
  89. tff(implb, type, implb: (bool * bool) > bool).
  90.  
  91. tff(implb_def, axiom, ![X:bool]: ((implb(X, true) = true) & ((implb(true,
  92. false) = false) & (implb(false, false) = true)))).
  93.  
  94. tff(compatOrderMult, axiom, ![X:$int, Y:$int, Z:$int]: ($lesseq(X,Y)
  95. => ($lesseq(0,Z) => $lesseq($product(X,Z),$product(Y,Z))))).
  96.  
  97. tff(abs, type, abs: $int > $int).
  98.  
  99. tff(abs_def, axiom, ![X:$int]: (($lesseq(0,X) => (abs(X) = X)) & (~
  100. $lesseq(0,X) => (abs(X) = $uminus(X))))).
  101.  
  102. tff(abs_le, axiom, ![X:$int, Y:$int]: ($lesseq(abs(X),Y)
  103. <=> ($lesseq($uminus(Y),X) & $lesseq(X,Y)))).
  104.  
  105. tff(abs_pos, axiom, ![X:$int]: $lesseq(0,abs(X))).
  106.  
  107. tff(div, type, div: ($int * $int) > $int).
  108.  
  109. tff(mod, type, mod: ($int * $int) > $int).
  110.  
  111. tff(div_mod, axiom, ![X:$int, Y:$int]: (~ (Y = 0)
  112. => (X = $sum($product(Y,div(X, Y)),mod(X, Y))))).
  113.  
  114. tff(div_bound, axiom, ![X:$int, Y:$int]: (($lesseq(0,X) & $less(0,Y))
  115. => ($lesseq(0,div(X, Y)) & $lesseq(div(X, Y),X)))).
  116.  
  117. tff(mod_bound, axiom, ![X:$int, Y:$int]: (~ (Y = 0)
  118. => ($less($uminus(abs(Y)),mod(X, Y)) & $less(mod(X, Y),abs(Y))))).
  119.  
  120. tff(div_sign_pos, axiom, ![X:$int, Y:$int]: (($lesseq(0,X) & $less(0,Y))
  121. => $lesseq(0,div(X, Y)))).
  122.  
  123. tff(div_sign_neg, axiom, ![X:$int, Y:$int]: (($lesseq(X,0) & $less(0,Y))
  124. => $lesseq(div(X, Y),0))).
  125.  
  126. tff(mod_sign_pos, axiom, ![X:$int, Y:$int]: (($lesseq(0,X) & ~ (Y = 0))
  127. => $lesseq(0,mod(X, Y)))).
  128.  
  129. tff(mod_sign_neg, axiom, ![X:$int, Y:$int]: (($lesseq(X,0) & ~ (Y = 0))
  130. => $lesseq(mod(X, Y),0))).
  131.  
  132. tff(rounds_toward_zero, axiom, ![X:$int, Y:$int]: (~ (Y = 0)
  133. => $lesseq(abs($product(div(X, Y),Y)),abs(X)))).
  134.  
  135. tff(div_1, axiom, ![X:$int]: (div(X, 1) = X)).
  136.  
  137. tff(mod_1, axiom, ![X:$int]: (mod(X, 1) = 0)).
  138.  
  139. tff(div_inf, axiom, ![X:$int, Y:$int]: (($lesseq(0,X) & $less(X,Y))
  140. => (div(X, Y) = 0))).
  141.  
  142. tff(mod_inf, axiom, ![X:$int, Y:$int]: (($lesseq(0,X) & $less(X,Y))
  143. => (mod(X, Y) = X))).
  144.  
  145. tff(div_mult, axiom, ![X:$int, Y:$int, Z:$int]: (($less(0,X) & ($lesseq(0,Y)
  146. & $lesseq(0,Z))) => (div($sum($product(X,Y),Z), X) = $sum(Y,div(Z, X))))).
  147.  
  148. tff(mod_mult, axiom, ![X:$int, Y:$int, Z:$int]: (($less(0,X) & ($lesseq(0,Y)
  149. & $lesseq(0,Z))) => (mod($sum($product(X,Y),Z), X) = mod(Z, X)))).
  150.  
  151. tff(set, type, set: $tType > $tType).
  152.  
  153. tff(mem, type, mem: !>[A : $tType]: ((A * set(A)) > $o)).
  154.  
  155. tff(infix_eqeq, type, infix_eqeq: !>[A : $tType]: ((set(A) * set(A)) > $o)).
  156.  
  157. tff(infix_eqeq_def, axiom, ![A : $tType]: ![S:set(A), T:set(A)]:
  158. (infix_eqeq(A, S, T) <=> ![X:A]: (mem(A, X, S) <=> mem(A, X, T)))).
  159.  
  160. tff(power, type, power: !>[A : $tType]: (set(A) > set(set(A)))).
  161.  
  162. tff(non_empty_power, type, non_empty_power: !>[A : $tType]: (set(A) >
  163. set(set(A)))).
  164.  
  165. tff(subset, type, subset: !>[A : $tType]: ((set(A) * set(A)) > $o)).
  166.  
  167. tff(subset_def, axiom, ![A : $tType]: ![S:set(A), T:set(A)]: (subset(A, S, T)
  168. <=> mem(set(A), S, power(A, T)))).
  169.  
  170. tff(subsetnoteq, type, subsetnoteq: !>[A : $tType]: ((set(A) * set(A)) >
  171. $o)).
  172.  
  173. tff(subsetnoteq_def, axiom, ![A : $tType]: ![S:set(A), T:set(A)]:
  174. (subsetnoteq(A, S, T) <=> (subset(A, S, T) & ~ infix_eqeq(A, S, T)))).
  175.  
  176. tff(empty, type, empty: !>[A : $tType]: set(A)).
  177.  
  178. tff(is_empty, type, is_empty: !>[A : $tType]: (set(A) > $o)).
  179.  
  180. tff(is_empty_def, axiom, ![A : $tType]: ![S:set(A)]: (is_empty(A, S) <=> ![X:
  181. A]: ~ mem(A, X, S))).
  182.  
  183. tff(empty_def1, axiom, ![A : $tType]: is_empty(A, empty(A))).
  184.  
  185. tff(empty1, axiom, ![A : $tType]: ![X:A]: ~ mem(A, X, empty(A))).
  186.  
  187. tff(add, type, add: !>[A : $tType]: ((A * set(A)) > set(A))).
  188.  
  189. tff(add_def1, axiom, ![A : $tType]: ![X:A, Y:A]: ![S:set(A)]: (mem(A, X,
  190. add(A, Y, S)) <=> ((X = Y) | mem(A, X, S)))).
  191.  
  192. tff(singleton, type, singleton: !>[A : $tType]: (A > set(A))).
  193.  
  194. tff(mem_singleton, axiom, ![A : $tType]: ![X:A, Y:A]: (mem(A, X,
  195. singleton(A, Y)) <=> (X = Y))).
  196.  
  197. tff(remove, type, remove: !>[A : $tType]: ((A * set(A)) > set(A))).
  198.  
  199. tff(remove_def1, axiom, ![A : $tType]: ![X:A, Y:A, S:set(A)]: (mem(A, X,
  200. remove(A, Y, S)) <=> (~ (X = Y) & mem(A, X, S)))).
  201.  
  202. tff(all, type, all: !>[A : $tType]: set(A)).
  203.  
  204. tff(all_def, axiom, ![A : $tType]: ![X:A]: mem(A, X, all(A))).
  205.  
  206. tff(union, type, union: !>[A : $tType]: ((set(A) * set(A)) > set(A))).
  207.  
  208. tff(mem_union, axiom, ![A : $tType]: ![S:set(A), T:set(A), X:A]: (mem(A, X,
  209. union(A, S, T)) <=> (mem(A, X, S) | mem(A, X, T)))).
  210.  
  211. tff(inter, type, inter: !>[A : $tType]: ((set(A) * set(A)) > set(A))).
  212.  
  213. tff(mem_inter, axiom, ![A : $tType]: ![S:set(A), T:set(A), X:A]: (mem(A, X,
  214. inter(A, S, T)) <=> (mem(A, X, S) & mem(A, X, T)))).
  215.  
  216. tff(diff, type, diff: !>[A : $tType]: ((set(A) * set(A)) > set(A))).
  217.  
  218. tff(mem_diff, axiom, ![A : $tType]: ![S:set(A), T:set(A), X:A]: (mem(A, X,
  219. diff(A, S, T)) <=> (mem(A, X, S) & ~ mem(A, X, T)))).
  220.  
  221. tff(b_bool, type, b_bool: set(bool)).
  222.  
  223. tff(mem_b_bool, axiom, ![X:bool]: mem(bool, X, b_bool)).
  224.  
  225. tff(integer, type, integer: set($int)).
  226.  
  227. tff(mem_integer, axiom, ![X:$int]: mem($int, X, integer)).
  228.  
  229. tff(natural, type, natural: set($int)).
  230.  
  231. tff(mem_natural, axiom, ![X:$int]: (mem($int, X, natural) <=> $lesseq(0,X))).
  232.  
  233. tff(natural1, type, natural1: set($int)).
  234.  
  235. tff(mem_natural1, axiom, ![X:$int]: (mem($int, X, natural1) <=> $less(0,X))).
  236.  
  237. tff(nat, type, nat: set($int)).
  238.  
  239. tff(mem_nat, axiom, ![X:$int]: (mem($int, X, nat) <=> ($lesseq(0,X)
  240. & $lesseq(X,2147483647)))).
  241.  
  242. tff(nat1, type, nat1: set($int)).
  243.  
  244. tff(mem_nat1, axiom, ![X:$int]: (mem($int, X, nat1) <=> ($less(0,X)
  245. & $lesseq(X,2147483647)))).
  246.  
  247. tff(bounded_int, type, bounded_int: set($int)).
  248.  
  249. tff(mem_bounded_int, axiom, ![X:$int]: (mem($int, X, bounded_int)
  250. <=> ($lesseq($uminus(2147483647),X) & $lesseq(X,2147483647)))).
  251.  
  252. tff(mk, type, mk: ($int * $int) > set($int)).
  253.  
  254. tff(mem_interval, axiom, ![X:$int, A:$int, B:$int]: (mem($int, X, mk(A, B))
  255. <=> ($lesseq(A,X) & $lesseq(X,B)))).
  256.  
  257. tff(tuple2, type, tuple2: ($tType * $tType) > $tType).
  258.  
  259. tff(tuple21, type, tuple21: !>[A : $tType, A1 : $tType]: ((A1 * A) >
  260. tuple2(A1, A))).
  261.  
  262. tff(tuple2_proj_1, type, tuple2_proj_1: !>[A : $tType, A1 : $tType]:
  263. (tuple2(A1, A) > A1)).
  264.  
  265. tff(tuple2_proj_1_def, axiom, ![A : $tType, A1 : $tType]: ![U:A1, U1:A]:
  266. (tuple2_proj_1(A, A1, tuple21(A, A1, U, U1)) = U)).
  267.  
  268. tff(tuple2_proj_2, type, tuple2_proj_2: !>[A : $tType, A1 : $tType]:
  269. (tuple2(A1, A) > A)).
  270.  
  271. tff(tuple2_proj_2_def, axiom, ![A : $tType, A1 : $tType]: ![U:A1, U1:A]:
  272. (tuple2_proj_2(A, A1, tuple21(A, A1, U, U1)) = U1)).
  273.  
  274. tff(tuple2_inversion, axiom, ![A : $tType, A1 : $tType]: ![U:tuple2(A1, A)]:
  275. (U = tuple21(A, A1, tuple2_proj_1(A, A1, U), tuple2_proj_2(A, A1, U)))).
  276.  
  277. tff(times, type, times: !>[A : $tType, B : $tType]: ((set(A) * set(B)) >
  278. set(tuple2(A, B)))).
  279.  
  280. tff(mem_times, axiom, ![A : $tType, B : $tType]: ![S:set(A), T:set(B), X:A,
  281. Y:B]: (mem(tuple2(A, B), tuple21(B, A, X, Y), times(A, B, S, T))
  282. <=> (mem(A, X, S) & mem(B, Y, T)))).
  283.  
  284. tff(mem_power, axiom, ![A : $tType]: ![S:set(A), T:set(A)]: (mem(set(A), S,
  285. power(A, T)) <=> ![X:A]: (mem(A, X, S) => mem(A, X, T)))).
  286.  
  287. tff(mem_non_empty_power, axiom, ![A : $tType]: ![S:set(A), T:set(A)]:
  288. (mem(set(A), S, non_empty_power(A, T)) <=> (![X:A]: (mem(A, X, S)
  289. => mem(A, X, T)) & ~ infix_eqeq(A, S, empty(A))))).
  290.  
  291. tff(choose, type, choose: !>[A : $tType]: (set(A) > A)).
  292.  
  293. tff(relation, type, relation: !>[A : $tType, B : $tType]: ((set(A) *
  294. set(B)) > set(set(tuple2(A, B))))).
  295.  
  296. tff(mem_relation, axiom, ![A : $tType, B : $tType]: ![U:set(A), V:set(B), R:
  297. set(tuple2(A, B))]: (mem(set(tuple2(A, B)), R, relation(A, B, U, V))
  298. <=> ![X:A, Y:B]: (mem(tuple2(A, B), tuple21(B, A, X, Y), R) => (mem(A, X,
  299. U) & mem(B, Y, V))))).
  300.  
  301. tff(inverse, type, inverse: !>[A : $tType, B : $tType]: (set(tuple2(A, B)) >
  302. set(tuple2(B, A)))).
  303.  
  304. tff(mem_inverse, axiom, ![A : $tType, B : $tType]: ![P:set(tuple2(A, B)), X:
  305. B, Y:A]: (mem(tuple2(B, A), tuple21(A, B, X, Y), inverse(A, B, P))
  306. <=> mem(tuple2(A, B), tuple21(B, A, Y, X), P))).
  307.  
  308. tff(dom, type, dom: !>[A : $tType, B : $tType]: (set(tuple2(A, B)) >
  309. set(A))).
  310.  
  311. tff(mem_dom, axiom, ![A : $tType, B : $tType]: ![P:set(tuple2(A, B)), X:A]:
  312. (mem(A, X, dom(A, B, P)) <=> ?[B1:B]: mem(tuple2(A, B), tuple21(B, A, X,
  313. B1), P))).
  314.  
  315. tff(ran, type, ran: !>[A : $tType, B : $tType]: (set(tuple2(A, B)) >
  316. set(B))).
  317.  
  318. tff(mem_ran, axiom, ![A : $tType, B : $tType]: ![P:set(tuple2(A, B)), X:B]:
  319. (mem(B, X, ran(A, B, P)) <=> ?[A1:A]: mem(tuple2(A, B), tuple21(B, A, A1,
  320. X), P))).
  321.  
  322. tff(semicolon, type, semicolon: !>[A : $tType, B : $tType, C : $tType]:
  323. ((set(tuple2(A, B)) * set(tuple2(B, C))) > set(tuple2(A, C)))).
  324.  
  325. tff(mem_semicolon, axiom, ![A : $tType, B : $tType, C : $tType]: ![P:
  326. set(tuple2(A, B)), Q:set(tuple2(B, C)), X:A, Y:C]:
  327. (mem(tuple2(A, C), tuple21(C, A, X, Y), semicolon(A, B, C, P, Q)) <=> ?[B1:
  328. B]: (mem(tuple2(A, B), tuple21(B, A, X, B1), P)
  329. & mem(tuple2(B, C), tuple21(C, B, B1, Y), Q)))).
  330.  
  331. tff(semicolon_back, type, semicolon_back: !>[A : $tType, B : $tType,
  332. C : $tType]: ((set(tuple2(B, C)) * set(tuple2(A, B))) >
  333. set(tuple2(A, C)))).
  334.  
  335. tff(semicolon_back1, axiom, ![A : $tType, B : $tType, C : $tType]: ![P:
  336. set(tuple2(A, B)), Q:set(tuple2(B, C))]: (semicolon_back(A, B, C, Q,
  337. P) = semicolon(A, B, C, P, Q))).
  338.  
  339. tff(id, type, id: !>[A : $tType]: (set(A) > set(tuple2(A, A)))).
  340.  
  341. tff(mem_id, axiom, ![A : $tType]: ![U:set(A), X:A, Y:A]:
  342. (mem(tuple2(A, A), tuple21(A, A, X, Y), id(A, U)) <=> (mem(A, X, U)
  343. & (X = Y)))).
  344.  
  345. tff(domain_restriction, type, domain_restriction: !>[A : $tType, B : $tType]:
  346. ((set(A) * set(tuple2(A, B))) > set(tuple2(A, B)))).
  347.  
  348. tff(mem_domain_restriction, axiom, ![A : $tType, B : $tType]: ![P:
  349. set(tuple2(A, B)), S:set(A), X:A, Y:B]: (mem(tuple2(A, B), tuple21(B, A, X,
  350. Y), domain_restriction(A, B, S, P)) <=> (mem(tuple2(A, B), tuple21(B, A, X,
  351. Y), P) & mem(A, X, S)))).
  352.  
  353. tff(range_restriction, type, range_restriction: !>[A : $tType, B : $tType]:
  354. ((set(tuple2(A, B)) * set(B)) > set(tuple2(A, B)))).
  355.  
  356. tff(mem_range_restriction, axiom, ![A : $tType, B : $tType]: ![P:
  357. set(tuple2(A, B)), T:set(B), X:A, Y:B]: (mem(tuple2(A, B), tuple21(B, A, X,
  358. Y), range_restriction(A, B, P, T)) <=> (mem(tuple2(A, B), tuple21(B, A, X,
  359. Y), P) & mem(B, Y, T)))).
  360.  
  361. tff(domain_substraction, type, domain_substraction: !>[A : $tType,
  362. B : $tType]: ((set(A) * set(tuple2(A, B))) > set(tuple2(A, B)))).
  363.  
  364. tff(mem_domain_substraction, axiom, ![A : $tType, B : $tType]: ![P:
  365. set(tuple2(A, B)), S:set(A), X:A, Y:B]: (mem(tuple2(A, B), tuple21(B, A, X,
  366. Y), domain_substraction(A, B, S, P)) <=> (mem(tuple2(A, B), tuple21(B,
  367. A, X, Y), P) & ~ mem(A, X, S)))).
  368.  
  369. tff(range_substraction, type, range_substraction: !>[A : $tType, B : $tType]:
  370. ((set(tuple2(A, B)) * set(B)) > set(tuple2(A, B)))).
  371.  
  372. tff(mem_range_substraction, axiom, ![A : $tType, B : $tType]: ![P:
  373. set(tuple2(A, B)), T:set(B), X:A, Y:B]: (mem(tuple2(A, B), tuple21(B, A, X,
  374. Y), range_substraction(A, B, P, T)) <=> (mem(tuple2(A, B), tuple21(B, A, X,
  375. Y), P) & ~ mem(B, Y, T)))).
  376.  
  377. tff(image, type, image: !>[A : $tType, B : $tType]: ((set(tuple2(A, B)) *
  378. set(A)) > set(B))).
  379.  
  380. tff(mem_image, axiom, ![A : $tType, B : $tType]: ![P:set(tuple2(A, B)), W:
  381. set(A), X:B]: (mem(B, X, image(A, B, P, W)) <=> ?[A1:A]: (mem(A, A1, W)
  382. & mem(tuple2(A, B), tuple21(B, A, A1, X), P)))).
  383.  
  384. tff(infix_lspl, type, infix_lspl: !>[A : $tType, B : $tType]:
  385. ((set(tuple2(A, B)) * set(tuple2(A, B))) > set(tuple2(A, B)))).
  386.  
  387. tff(mem_overriding, axiom, ![A : $tType, B : $tType]: ![Q:set(tuple2(A, B)),
  388. P:set(tuple2(A, B)), X:A, Y:B]: (mem(tuple2(A, B), tuple21(B, A, X, Y),
  389. infix_lspl(A, B, Q, P)) <=> ((mem(tuple2(A, B), tuple21(B, A, X, Y), Q) & ~
  390. mem(A, X, dom(A, B, P))) | mem(tuple2(A, B), tuple21(B, A, X, Y), P)))).
  391.  
  392. tff(direct_product, type, direct_product: !>[A : $tType, B : $tType,
  393. C : $tType]: ((set(tuple2(A, B)) * set(tuple2(A, C))) >
  394. set(tuple2(A, tuple2(B, C))))).
  395.  
  396. tff(mem_direct_product, axiom, ![A : $tType, B : $tType, C : $tType]: ![F:
  397. set(tuple2(A, B)), G:set(tuple2(A, C)), X:A, Y:B, Z:C]:
  398. (mem(tuple2(A, tuple2(B, C)), tuple21(tuple2(B, C), A, X, tuple21(C, B, Y,
  399. Z)), direct_product(A, B, C, F, G)) <=> (mem(tuple2(A, B), tuple21(B, A, X,
  400. Y), F) & mem(tuple2(A, C), tuple21(C, A, X, Z), G)))).
  401.  
  402. tff(prj1, type, prj1: !>[A : $tType, B : $tType]: (tuple2(set(A), set(B)) >
  403. set(tuple2(tuple2(A, B), A)))).
  404.  
  405. tff(mem_proj_op_1, axiom, ![A : $tType, B : $tType]: ![S:set(A), T:set(B), X:
  406. A, Y:B, Z:A]: (mem(tuple2(tuple2(A, B), A), tuple21(A,
  407. tuple2(A, B), tuple21(B, A, X, Y), Z), prj1(A, B, tuple21(set(B),
  408. set(A), S, T))) <=> (mem(tuple2(tuple2(A, B), A), tuple21(A,
  409. tuple2(A, B), tuple21(B, A, X, Y), Z), times(tuple2(A, B), A, times(A,
  410. B, S, T), S)) & (Z = X)))).
  411.  
  412. tff(prj2, type, prj2: !>[A : $tType, B : $tType]: (tuple2(set(A), set(B)) >
  413. set(tuple2(tuple2(A, B), B)))).
  414.  
  415. tff(mem_proj_op_2, axiom, ![A : $tType, B : $tType]: ![S:set(A), T:set(B), X:
  416. A, Y:B, Z:B]: (mem(tuple2(tuple2(A, B), B), tuple21(B,
  417. tuple2(A, B), tuple21(B, A, X, Y), Z), prj2(A, B, tuple21(set(B),
  418. set(A), S, T))) <=> (mem(tuple2(tuple2(A, B), B), tuple21(B,
  419. tuple2(A, B), tuple21(B, A, X, Y), Z), times(tuple2(A, B), B, times(A,
  420. B, S, T), T)) & (Z = Y)))).
  421.  
  422. tff(parallel_product, type, parallel_product: !>[A : $tType, B : $tType,
  423. C : $tType, D : $tType]: ((set(tuple2(A, B)) * set(tuple2(C, D))) >
  424. set(tuple2(tuple2(A, C), tuple2(B, D))))).
  425.  
  426. tff(mem_parallel_product, axiom, ![A : $tType, B : $tType, C : $tType,
  427. D : $tType]: ![H:set(tuple2(A, B)), K:set(tuple2(C, D)), X:A, Y:C, Z:B, W:
  428. D]: (mem(tuple2(tuple2(A, C), tuple2(B, D)), tuple21(tuple2(B, D),
  429. tuple2(A, C), tuple21(C, A, X, Y), tuple21(D, B, Z, W)),
  430. parallel_product(A, B, C, D, H, K)) <=> (mem(tuple2(A, B), tuple21(B, A, X,
  431. Z), H) & mem(tuple2(C, D), tuple21(D, C, Y, W), K)))).
  432.  
  433. tff(infix_plmngt, type, infix_plmngt: !>[A : $tType, B : $tType]: ((set(A) *
  434. set(B)) > set(set(tuple2(A, B))))).
  435.  
  436. tff(mem_partial_function_set, axiom, ![A : $tType, B : $tType]: ![S:set(A),
  437. T:set(B), F:set(tuple2(A, B))]: (mem(set(tuple2(A, B)), F, infix_plmngt(A,
  438. B, S, T)) <=> (mem(set(tuple2(A, B)), F, relation(A, B, S, T)) & ![X:A, Y1:
  439. B, Y2:B]: ((mem(tuple2(A, B), tuple21(B, A, X, Y1), F)
  440. & mem(tuple2(A, B), tuple21(B, A, X, Y2), F)) => (Y1 = Y2))))).
  441.  
  442. tff(infix_mnmngt, type, infix_mnmngt: !>[A : $tType, B : $tType]: ((set(A) *
  443. set(B)) > set(set(tuple2(A, B))))).
  444.  
  445. tff(mem_total_function_set, axiom, ![A : $tType, B : $tType]: ![S:set(A), T:
  446. set(B), X:set(tuple2(A, B))]: (mem(set(tuple2(A, B)), X, infix_mnmngt(A,
  447. B, S, T)) <=> (mem(set(tuple2(A, B)), X, infix_plmngt(A, B, S, T))
  448. & infix_eqeq(A, dom(A, B, X), S)))).
  449.  
  450. tff(infix_gtplgt, type, infix_gtplgt: !>[A : $tType, B : $tType]: ((set(A) *
  451. set(B)) > set(set(tuple2(A, B))))).
  452.  
  453. tff(mem_partial_injection_set, axiom, ![A : $tType, B : $tType]: ![S:
  454. set(A), T:set(B), X:set(tuple2(A, B))]: (mem(set(tuple2(A, B)), X,
  455. infix_gtplgt(A, B, S, T)) <=> (mem(set(tuple2(A, B)), X, infix_plmngt(A,
  456. B, S, T)) & mem(set(tuple2(B, A)), inverse(A, B, X), infix_plmngt(B, A, T,
  457. S))))).
  458.  
  459. tff(infix_gtmngt, type, infix_gtmngt: !>[A : $tType, B : $tType]: ((set(A) *
  460. set(B)) > set(set(tuple2(A, B))))).
  461.  
  462. tff(mem_total_injection_set, axiom, ![A : $tType, B : $tType]: ![S:set(A), T:
  463. set(B), X:set(tuple2(A, B))]: (mem(set(tuple2(A, B)), X, infix_gtmngt(A,
  464. B, S, T)) <=> (mem(set(tuple2(A, B)), X, infix_gtplgt(A, B, S, T))
  465. & mem(set(tuple2(A, B)), X, infix_mnmngt(A, B, S, T))))).
  466.  
  467. tff(infix_plmngtgt, type, infix_plmngtgt: !>[A : $tType, B : $tType]:
  468. ((set(A) * set(B)) > set(set(tuple2(A, B))))).
  469.  
  470. tff(mem_partial_surjection_set, axiom, ![A : $tType, B : $tType]: ![S:
  471. set(A), T:set(B), X:set(tuple2(A, B))]: (mem(set(tuple2(A, B)), X,
  472. infix_plmngtgt(A, B, S, T)) <=> (mem(set(tuple2(A, B)), X, infix_plmngt(A,
  473. B, S, T)) & infix_eqeq(B, ran(A, B, X), T)))).
  474.  
  475. tff(infix_mnmngtgt, type, infix_mnmngtgt: !>[A : $tType, B : $tType]:
  476. ((set(A) * set(B)) > set(set(tuple2(A, B))))).
  477.  
  478. tff(mem_total_surjection_set, axiom, ![A : $tType, B : $tType]: ![S:set(A),
  479. T:set(B), X:set(tuple2(A, B))]: (mem(set(tuple2(A, B)), X,
  480. infix_mnmngtgt(A, B, S, T)) <=> (mem(set(tuple2(A, B)), X,
  481. infix_plmngtgt(A, B, S, T)) & mem(set(tuple2(A, B)), X, infix_mnmngt(A,
  482. B, S, T))))).
  483.  
  484. tff(infix_gtplgtgt, type, infix_gtplgtgt: !>[A : $tType, B : $tType]:
  485. ((set(A) * set(B)) > set(set(tuple2(A, B))))).
  486.  
  487. tff(mem_partial_bijection_set, axiom, ![A : $tType, B : $tType]: ![S:
  488. set(A), T:set(B), X:set(tuple2(A, B))]: (mem(set(tuple2(A, B)), X,
  489. infix_gtplgtgt(A, B, S, T)) <=> (mem(set(tuple2(A, B)), X, infix_gtplgt(A,
  490. B, S, T)) & mem(set(tuple2(A, B)), X, infix_plmngtgt(A, B, S, T))))).
  491.  
  492. tff(infix_gtmngtgt, type, infix_gtmngtgt: !>[A : $tType, B : $tType]:
  493. ((set(A) * set(B)) > set(set(tuple2(A, B))))).
  494.  
  495. tff(mem_total_bijection_set, axiom, ![A : $tType, B : $tType]: ![S:set(A), T:
  496. set(B), X:set(tuple2(A, B))]: (mem(set(tuple2(A, B)), X, infix_gtmngtgt(A,
  497. B, S, T)) <=> (mem(set(tuple2(A, B)), X, infix_gtmngt(A, B, S, T))
  498. & mem(set(tuple2(A, B)), X, infix_mnmngtgt(A, B, S, T))))).
  499.  
  500. tff(apply, type, apply: !>[A : $tType, B : $tType]: ((set(tuple2(A, B)) *
  501. A) > B)).
  502.  
  503. tff(apply_def0, axiom, ![A : $tType, B : $tType]: ![F:set(tuple2(A, B)), S:
  504. set(A), T:set(B), A1:A]: ((mem(set(tuple2(A, B)), F, infix_plmngt(A, B, S,
  505. T)) & mem(A, A1, dom(A, B, F))) => mem(tuple2(A, B), tuple21(B, A, A1,
  506. apply(A, B, F, A1)), F))).
  507.  
  508. tff(apply_def2, axiom, ![A : $tType, B : $tType]: ![F:set(tuple2(A, B)), S:
  509. set(A), T:set(B), A1:A, B1:B]: ((mem(set(tuple2(A, B)), F, infix_plmngt(A,
  510. B, S, T)) & mem(tuple2(A, B), tuple21(B, A, A1, B1), F)) => (apply(A, B, F,
  511. A1) = B1))).
  512.  
  513. tff(seq_length, type, seq_length: !>[A : $tType]: (($int * set(A)) >
  514. set(set(tuple2($int, A))))).
  515.  
  516. tff(seq_length_def, axiom, ![A : $tType]: ![N:$int, S:set(A)]:
  517. (seq_length(A, N, S) = infix_mnmngt($int, A, mk(1, N), S))).
  518.  
  519. tff(size, type, size: !>[A : $tType]: (set(tuple2($int, A)) > $int)).
  520.  
  521. tff(size_def, axiom, ![A : $tType]: ![N:$int, S:set(A), R:
  522. set(tuple2($int, A))]: (($lesseq(0,N) & mem(set(tuple2($int, A)), R,
  523. seq_length(A, N, S))) => (size(A, R) = N))).
  524.  
  525. tff(seq, type, seq: !>[A : $tType]: (set(A) > set(set(tuple2($int, A))))).
  526.  
  527. tff(seq_def, axiom, ![A : $tType]: ![S:set(A), R:set(tuple2($int, A))]:
  528. (mem(set(tuple2($int, A)), R, seq(A, S)) <=> ($lesseq(0,size(A, R))
  529. & mem(set(tuple2($int, A)), R, seq_length(A, size(A, R), S))))).
  530.  
  531. tff(seq1, type, seq1: !>[A : $tType]: (set(A) > set(set(tuple2($int, A))))).
  532.  
  533. tff(iseq, type, iseq: !>[A : $tType]: (set(A) > set(set(tuple2($int, A))))).
  534.  
  535. tff(iseq1, type, iseq1: !>[A : $tType]: (set(A) >
  536. set(set(tuple2($int, A))))).
  537.  
  538. tff(perm, type, perm: !>[A : $tType]: (set(A) > set(set(tuple2($int, A))))).
  539.  
  540. tff(insert_in_front, type, insert_in_front: !>[A : $tType]: ((A *
  541. set(tuple2($int, A))) > set(tuple2($int, A)))).
  542.  
  543. tff(insert_at_tail, type, insert_at_tail: !>[A : $tType]:
  544. ((set(tuple2($int, A)) * A) > set(tuple2($int, A)))).
  545.  
  546. tff(tail, type, tail: !>[A : $tType]: (set(tuple2($int, A)) >
  547. set(tuple2($int, A)))).
  548.  
  549. tff(last, type, last: !>[A : $tType]: (set(tuple2($int, A)) > A)).
  550.  
  551. tff(first, type, first: !>[A : $tType]: (set(tuple2($int, A)) > A)).
  552.  
  553. tff(front, type, front: !>[A : $tType]: (set(tuple2($int, A)) >
  554. set(tuple2($int, A)))).
  555.  
  556. tff(concatenation, type, concatenation: !>[A : $tType]:
  557. ((set(tuple2($int, A)) * set(tuple2($int, A))) > set(tuple2($int, A)))).
  558.  
  559. tff(conc, type, conc: !>[A : $tType]:
  560. (set(tuple2($int, set(tuple2($int, A)))) > set(tuple2($int, A)))).
  561.  
  562. tff(is_finite_subset, type, is_finite_subset: !>[A : $tType]: ((set(A) *
  563. set(A) * $int) > $o)).
  564.  
  565. tff(empty2, axiom, ![A : $tType]: ![S:set(A)]: is_finite_subset(A, empty(A),
  566. S, 0)).
  567.  
  568. tff(add_mem, axiom, ![A : $tType]: ![X:A, S1:set(A), S2:set(A), C:$int]:
  569. (is_finite_subset(A, S1, S2, C) => (mem(A, X, S2) => (mem(A, X, S1)
  570. => is_finite_subset(A, add(A, X, S1), S2, C))))).
  571.  
  572. tff(add_notmem, axiom, ![A : $tType]: ![X:A, S1:set(A), S2:set(A), C:$int]:
  573. (is_finite_subset(A, S1, S2, C) => (mem(A, X, S2) => (~ mem(A, X, S1)
  574. => is_finite_subset(A, add(A, X, S1), S2, $sum(C,1)))))).
  575.  
  576. tff(is_finite_subset_inversion, axiom, ![A : $tType]: ![Z:set(A), Z1:
  577. set(A), Z2:$int]: (is_finite_subset(A, Z, Z1, Z2) => ((?[S:set(A)]:
  578. (((Z = empty(A)) & (Z1 = S)) & (Z2 = 0)) | ?[X:A, S1:set(A), S2:set(A), C:
  579. $int]: (is_finite_subset(A, S1, S2, C) & (mem(A, X, S2) & (mem(A, X, S1)
  580. & (((Z = add(A, X, S1)) & (Z1 = S2)) & (Z2 = C)))))) | ?[X:A, S1:set(A),
  581. S2:set(A), C:$int]: (is_finite_subset(A, S1, S2, C) & (mem(A, X, S2) & (~
  582. mem(A, X, S1) & (((Z = add(A, X, S1)) & (Z1 = S2))
  583. & (Z2 = $sum(C,1))))))))).
  584.  
  585. tff(finite_subsets, type, finite_subsets: !>[A : $tType]: (set(A) >
  586. set(set(A)))).
  587.  
  588. tff(finite_subsets_def, axiom, ![A : $tType]: ![S:set(A), X:set(A)]:
  589. (mem(set(A), X, finite_subsets(A, S)) <=> ?[C:$int]: is_finite_subset(A, X,
  590. S, C))).
  591.  
  592. tff(non_empty_finite_subsets, type, non_empty_finite_subsets: !>[A : $tType]:
  593. (set(A) > set(set(A)))).
  594.  
  595. tff(non_empty_finite_subsets_def, axiom, ![A : $tType]: ![S:set(A), X:
  596. set(A)]: (mem(set(A), X, non_empty_finite_subsets(A, S)) <=> ?[C:$int]:
  597. (is_finite_subset(A, X, S, C) & ~ infix_eqeq(A, X, empty(A))))).
  598.  
  599. tff(card, type, card: !>[A : $tType]: (set(A) > $int)).
  600.  
  601. tff(card_def, axiom, ![A : $tType]: ![S:set(A), X:set(A), C:$int]:
  602. (is_finite_subset(A, X, S, C) => (card(A, X) = C))).
  603.  
  604. tff(min, type, min: set($int) > $int).
  605.  
  606. tff(min_belongs, axiom, ![S:set($int)]: ((subset($int, S, natural) & ~
  607. infix_eqeq($int, S, empty($int))) => mem($int, min(S), S))).
  608.  
  609. tff(min_is_min, axiom, ![S:set($int), X:$int]: ((subset($int, S, natural)
  610. & mem($int, X, S)) => $lesseq(min(S),X))).
  611.  
  612. tff(max, type, max: set($int) > $int).
  613.  
  614. tff(max_belongs, axiom, ![S:set($int)]: (mem(set($int), S,
  615. non_empty_finite_subsets($int, natural)) => mem($int, max(S), S))).
  616.  
  617. tff(max_is_max, axiom, ![S:set($int), X:$int]: ((mem(set($int), S,
  618. finite_subsets($int, natural)) & mem($int, X, S)) => $lesseq(X,max(S)))).
  619.  
  620. tff(iterate, type, iterate: !>[A : $tType]:
  621. (tuple2(set(tuple2(A, A)), $int) > set(tuple2(A, A)))).
  622.  
  623. tff(iterate_def, axiom, ![A : $tType]: ![A1:set(tuple2(A, A)), B:$int]:
  624. (((B = 0) => (iterate(A, tuple21($int, set(tuple2(A, A)), A1,
  625. B)) = id(A, dom(A, A, A1)))) & (~ (B = 0) => (iterate(A, tuple21($int,
  626. set(tuple2(A, A)), A1, B)) = semicolon(A, A, A, iterate(A, tuple21($int,
  627. set(tuple2(A, A)), A1, $difference(B,1))), A1))))).
  628.  
  629. tff(closure, type, closure: !>[A : $tType]: (set(tuple2(A, A)) >
  630. set(tuple2(A, A)))).
  631.  
  632. tff(closure_def, axiom, ![A : $tType]: ![A1:set(tuple2(A, A)), U:
  633. tuple2(A, A)]: (mem(tuple2(A, A), U, closure(A, A1)) <=> ?[X:$int]:
  634. ($lesseq(0,X) & mem(tuple2(A, A), U, iterate(A, tuple21($int,
  635. set(tuple2(A, A)), A1, X)))))).
  636.  
  637. tff(closure1, type, closure1: !>[A : $tType]: (set(tuple2(A, A)) >
  638. set(tuple2(A, A)))).
  639.  
  640. tff(closure1_def, axiom, ![A : $tType]: ![A1:set(tuple2(A, A)), U:
  641. tuple2(A, A)]: (mem(tuple2(A, A), U, closure1(A, A1)) <=> ?[X:$int]:
  642. ($less(0,X) & mem(tuple2(A, A), U, iterate(A, tuple21($int,
  643. set(tuple2(A, A)), A1, X)))))).
  644.  
  645. tff(generalized_union, type, generalized_union: !>[A : $tType]:
  646. (set(set(A)) > set(A))).
  647.  
  648. tff(generalized_union_def, axiom, ![A : $tType]: ![A1:set(set(A)), X:A]:
  649. (mem(A, X, generalized_union(A, A1)) <=> ?[B:set(A)]: (mem(set(A), B, A1)
  650. & mem(A, X, B)))).
  651.  
  652. tff(uninterpreted_type, type, uninterpreted_type: $tType).
  653.  
  654. tff(assertionLemmas_1, conjecture, (($true & $true) => ((mod($uminus(1),
  655. $uminus(2)) = $uminus(1)) & $true))).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement