Aleksy Grabowski
2b73107631
Explain non_counted_backtracking a little bit more
2024-09-06 08:15:45 +02:00
Markus Triska
0005dcaacb
ADDED: Preliminary support for statistics/2.
...
This is needed for benchmarking library(reif) and its newly provided
goal expansion (#2433 ).
It partly addresses #321 .
2024-07-06 11:33:02 +02:00
Mark Thom
f3eea6302d
delay instantiation errors on lists in phrase/3 until runtime ( #1665 , #2396 )
2024-04-29 15:28:17 -06:00
Markus Triska
795a7c690d
ADDED: meta_predicate/1 declarations for (',')//2 and (;)//2
...
This addresses #2366 .
2024-03-21 22:14:40 +01:00
Markus Triska
767d90d5e7
ENHANCED: further partial evaluation for the common control sequence ~d
2024-03-20 21:10:14 +01:00
Markus Triska
bc04790fd5
extend partial evaluation to computing lengths when statically possible
2024-03-20 21:10:14 +01:00
Markus Triska
58f7c94e74
goal expansion for format/2 and format/3
...
In this way, we benefit from partial evaluation of format strings.
2024-03-20 21:10:14 +01:00
Markus Triska
8af29c200d
strengthen type check
2024-03-20 21:10:10 +01:00
Markus Triska
1db6bff890
ENHANCED: Partial evaluation of format_//2.
...
This moves analysis of the format string to compilation time when
possible, so that parsing it at run time is no longer necessary.
2024-03-20 20:59:43 +01:00
Markus Triska
ee60c463c8
indicate deprecated functionality
2024-03-16 21:23:12 +01:00
Markus Triska
e1a6b5eb03
DOC: Un-document the ability to use bytes with encoding(octet).
...
This usage is now considered deprecated. Use strings instead for
greater efficiency and type consistency in your applications.
This functionality is a candidate for removal in a future commit.
2024-03-16 20:37:06 +01:00
Markus Triska
4ebdd97ad3
DOC: Improve descriptions to make clear what encoding(octet) means.
...
In particular, octet does *not* mean that the input is a list of
Prolog bytes in the sense of "integers between 0..255", but that the
character codes are used directly as byte values.
2024-03-16 20:36:22 +01:00
Markus Triska
6b8a679a51
explain potential side-channel attacks due to compact string representation
...
This legitimate concern was already raised by @infogulch in:
https://github.com/mthom/scryer-prolog/issues/1309#issuecomment-1080028854
Thank you a lot!
2024-03-01 22:03:57 +01:00
Markus Triska
ec251b254c
ENHANCED: Safe HMAC verification, using constant time string comparison.
...
Without this provision, the expected HMAC can be gathered from timing
differences depending on the position where the strings first diverge,
and hence an attacker can forge an authenticated message by supplying
the gathered HMAC.
Test case, using exp(E) to succeed exactly 2^E times:
exp(E) :-
N is 2^E,
between(1, N, _).
yielding:
?- Options = [algorithm(sha512),hmac([1,2,3])],
Ds = "test",
crypto_data_hash(Ds, H, Options),
phrase((seq(As),seq(Bs)), H),
same_length(Bs, Cs),
maplist(=(a), Cs),
append(As, Cs, H1),
time((exp(10),crypto_data_hash(Ds, H1, Options),false)).
%@ % CPU time: 0.710s, 7_942_187 inferences
%@ % CPU time: 0.713s, 7_942_187 inferences
%@ % CPU time: 0.712s, 7_942_187 inferences
%@ % CPU time: 0.711s, 7_942_187 inferences
%@ % CPU time: 0.710s, 7_942_187 inferences
%@ % CPU time: 0.711s, 7_942_187 inferences
%@ % CPU time: 0.710s, 7_942_187 inferences
?- length(_, L), time((exp(10),crypto_data_hash("test", "3caebd1a0a2647930319a660b7d3642eb380fbd43202f9f6d08aabaa9ba50c39522a12ead10f0423f0af613cbc6fea74ad682ee11f563cc2e735722004fda2ba", [algorithm(sha512),hmac([0,L])]),false)).
%@ % CPU time: 0.733s, 7_878_699 inferences
%@ % CPU time: 0.734s, 7_878_699 inferences
%@ % CPU time: 0.732s, 7_878_699 inferences
%@ % CPU time: 0.733s, 7_878_699 inferences
%@ % CPU time: 0.733s, 7_878_699 inferences
%@ % CPU time: 0.733s, 7_878_699 inferences
%@ % CPU time: 0.733s, 7_878_699 inferences
%@ % CPU time: 0.733s, 7_878_699 inferences
%@ % CPU time: 0.733s, 7_878_699 inferences
%@ % CPU time: 0.733s, 7_878_699 inferences
%@ % CPU time: 0.733s, 7_878_699 inferences
%@ % CPU time: 0.515s, 5_525_404 inferences
%@ error('$interrupt_thrown',repl/0).
2024-03-01 18:59:48 +01:00
Mark
ba362e2fe0
issue callable type error from dynamic_module_resolution if module is not an atom ( #2345 )
2024-02-28 20:35:38 -07:00
Markus Triska
1dd0c599c6
DOC: Add DocLog comments for reasoning about elliptic curves.
2024-02-24 20:43:57 +01:00
Markus Triska
27852eafd7
ADDED: Hash-based message authentication code (HMAC), using hmac(Key).
2024-02-22 20:53:27 +01:00
Markus Triska
8f2e9c6b94
FIXED: char_type/2 for unbound first argument.
...
Surrogate pairs form a gap in valid character codes, see:
https://github.com/mthom/scryer-prolog/issues/2326#issuecomment-1937864665
Many thanks to @Skgland for the pointer, and to @librarianmage for the
question that spawned this!
This addresses #2326 .
2024-02-11 22:19:19 +01:00
Mark
539a1aee2c
fix tests broken by singleton
2024-02-07 21:46:32 -07:00
Markus Triska
53b7d9eec9
ENHANCED: Bidirectional char_type/2, addressing #2321 .
...
Suggested by @librarianmage, many thanks!
2024-02-07 20:57:28 +01:00
Markus Triska
aa98a7e7d6
ADDED: clpz_t/2, generalizing support for use with library(reif)
...
This was suggested and contributed by @librarianmage in:
https://github.com/mthom/scryer-prolog/issues/2225#issuecomment-1890801923
Many thanks!
If anyone can find a better predicate name, please let us know any time!
2024-02-06 19:05:29 +01:00
Adrián Arroyo Calle
ec4a8745e7
Add all_mdoules test and fix library(csv)
2024-02-04 21:34:01 +01:00
Markus Triska
3505cc3ba0
update answers using latest toplevel output
2024-01-25 21:33:27 +01:00
Markus Triska
05ba5f4358
rely on recently improved argument indexing for determinism
...
This is possible as of 4fd37335f5 .
2024-01-25 21:31:08 +01:00
Mark
bc616ca7d8
move call_residue_vars/2 from atts.pl to iso_ext.pl
2024-01-25 12:40:24 -07:00
Markus Triska
a6ccf95076
improve error context
...
Source: https://github.com/mthom/scryer-prolog/issues/2304#issuecomment-1906434756
2024-01-23 21:43:34 +01:00
Markus Triska
665f319a0e
no longer use (->)//2, since it is implementation defined
...
This addresses #2304 .
2024-01-23 21:42:36 +01:00
Markus Triska
81dba11ab1
use newly available false//0
2024-01-21 22:53:22 +01:00
Markus Triska
388fa5baa9
no longer use (->)//2, since it is implementation dependent
2024-01-21 22:50:36 +01:00
Markus Triska
fe3241c07c
remove checks that are now no longer needed due to representation errors
2024-01-21 10:28:19 +01:00
Markus Triska
0559ddca2a
ENHANCED: Throw representation errors for DCG bodies that use unsupported constructs.
...
This addresses #2285 .
2024-01-21 10:28:19 +01:00
Markus Triska
98a046500f
MODIFIED: (->)/2 in DCGs is now only supported in the context of if-then-else.
...
That is, ( If -> Then ; Else ) is still supported, but ( If -> Then ) not.
2024-01-21 10:28:19 +01:00
Mark Thom
58cd0d1669
Merge pull request #2301 from aarroyoc/docs-copy-term-3
...
Move copy_term/3 to library(iso_ext)
2024-01-19 10:18:59 -07:00
Adrián Arroyo Calle
99c85459a7
Move copy_term/3 to library(iso_ext)
2024-01-19 17:33:45 +01:00
Adrián Arroyo Calle
958bf51648
Throw error in call_residue_vars/2
2024-01-19 16:58:26 +01:00
Mark Thom
6fb3b61441
Merge pull request #2276 from triska/hophrase
...
ADDED: Support for higher-order non-terminals phrase//[2,3]
2024-01-11 11:56:10 -07:00
notoria
902cd5c3ea
Special case for (^)/2
...
The only solutions for `Z #= X^Z` are `X = Z, X in -1\/1`. Also helps
avoid big numbers.
2024-01-08 21:50:02 +01:00
Mark Thom
f9eadc8e6a
Merge pull request #2278 from notoria/clpz
...
Small fixes for `CLP(ℤ)`
2024-01-07 18:59:38 -07:00
notoria
1f3de74cbd
Fix bound computation in (^)/2
...
?- A in 0..1, B in-1..0, A^2 #= B.
false. % unexpected.
?- A^2 #= B, A in 0..1, B in-1..0.
A = 0, B = 0.
2024-01-07 20:19:40 +01:00
notoria
770ead9c05
Remove min/2 and max/2 when possible
...
?- A #= min(A,B).
clpz:(B#>=A), clpz:(A#=min(A,B)). % unexpected.
?- A #= min(A,0).
clpz:(A in inf..0), clpz:(A#=min(A,0)). % unexpected.
2024-01-07 20:15:28 +01:00
notoria
fe371ff1d1
Fix min/2 and max/2
...
?- X in 0..1, Y in 2..4, Z #= max(X,Y).
clpz:(X in 0..1), clpz:(Z#=max(X,Y)), clpz:(Z in 2..4), clpz:(Z#>=Y), clpz:(Y in 2..4). % unexpected.
?- X in 0..1, Y in 2..4, Z #= max(Y,X).
Y = Z, clpz:(X in 0..1), clpz:(Y in 2..4).
2024-01-07 20:14:32 +01:00
Markus Triska
2f783f0aef
Correct arithmetic inequalities accidentally broken in f5d9a67f36.
...
Example:
?- X #>= Y.
%@ clpz:(X#>=Y).
2024-01-07 09:33:54 +01:00
Mark Thom
92b85d4ba6
Merge pull request #2264 from Skgland/fix-os-argv-1
...
Fix os:argv/1 in case the raw args contain multiple `--`
2024-01-06 15:52:53 -07:00
Markus Triska
e702fe5c68
ADDED: Support for higher-order non-terminals phrase//[2,3]
...
These non-terminals take a grammar rule body and additional arguments
as arguments. These arguments are appended to the first argument.
A key motivation for the introduction of these non-terminals is found
in the discussion and sample code provided by @bakaq in:
https://github.com/mthom/scryer-prolog/discussions/2260
In this way, portable higher-order DCG programming is possible while
keeping the logical grammar rule expansion implementation dependent.
Example:
?- phrase(phrase('.', a, []), Cs).
Cs = "a".
2024-01-06 14:02:13 +01:00
Markus Triska
f2b63d1689
Prevent assertion of clauses for (-->)/2 when DCGs are enabled.
...
This addresses #1508 .
2024-01-05 19:04:53 +01:00
Skgland
78b83ca1e1
simplify os:argv/1 fix
2024-01-04 19:26:10 +01:00
Skgland
ea0130d114
use once to limit solutions instead of cut
2024-01-04 18:14:32 +01:00
Mark Thom
5abc72cc8b
Merge pull request #2268 from aarroyoc/docs-toplevel
...
Small fixes in documentation and toplevel.pl
2024-01-03 14:52:34 -07:00
Adrián Arroyo Calle
d58e91303b
Small fixes in documentation and toplevel.pl
2024-01-03 19:52:50 +01:00
Skgland
8bd0317e9c
fix os:argv(V) not completing
2024-01-02 21:43:38 +01:00