fixture(steps)
predicate(step/2)
step('__hash_consed_apply/2'('lambda/1', A), beta(B, C)) :-
( nonvar(A)
-> hash_consing:intern(apply('__hash_consed_lambda/1'(D), C), '__hash_consed_apply/2'('lambda/1', A)),
hash_consing:intern(lambda(B), '__hash_consed_lambda/1'(D))
; ( nonvar(A)
-> hash_consing:intern(apply('__hash_consed_lambda/1'(D), C), '__hash_consed_apply/2'('lambda/1', A))
; true
),
( nonvar(D)
-> hash_consing:intern(lambda(B), '__hash_consed_lambda/1'(D))
; true
),
( var(D),
ground(lambda(B))
-> hash_consing:intern(lambda(B), '__hash_consed_lambda/1'(D))
; true
),
( var(A),
ground(apply('__hash_consed_lambda/1'(D), C))
-> hash_consing:intern(apply('__hash_consed_lambda/1'(D), C), '__hash_consed_apply/2'('lambda/1', A))
; true
),
( var(D)
-> hash_consing:intern(lambda(B), '__hash_consed_lambda/1'(D))
; true
),
( var(A)
-> hash_consing:intern(apply('__hash_consed_lambda/1'(D), C), '__hash_consed_apply/2'('lambda/1', A))
; true
)
).
step('__hash_consed_apply/2'('closure_a/1', A), compiled(B, C)) :-
( nonvar(A)
-> hash_consing:intern(apply('__hash_consed_closure_a/1'(D), C), '__hash_consed_apply/2'('closure_a/1', A)),
hash_consing:intern(closure_a(B), '__hash_consed_closure_a/1'(D))
; ( nonvar(A)
-> hash_consing:intern(apply('__hash_consed_closure_a/1'(D), C), '__hash_consed_apply/2'('closure_a/1', A))
; true
),
( nonvar(D)
-> hash_consing:intern(closure_a(B), '__hash_consed_closure_a/1'(D))
; true
),
( var(D),
ground(closure_a(B))
-> hash_consing:intern(closure_a(B), '__hash_consed_closure_a/1'(D))
; true
),
( var(A),
ground(apply('__hash_consed_closure_a/1'(D), C))
-> hash_consing:intern(apply('__hash_consed_closure_a/1'(D), C), '__hash_consed_apply/2'('closure_a/1', A))
; true
),
( var(D)
-> hash_consing:intern(closure_a(B), '__hash_consed_closure_a/1'(D))
; true
),
( var(A)
-> hash_consing:intern(apply('__hash_consed_closure_a/1'(D), C), '__hash_consed_apply/2'('closure_a/1', A))
; true
)
).
step('__hash_consed_apply/2'('closure_b/0', A), constant(B)) :-
( nonvar(A)
-> hash_consing:intern(apply(baked(closure_b), B), '__hash_consed_apply/2'('closure_b/0', A))
; ( nonvar(A)
-> hash_consing:intern(apply(baked(closure_b), B), '__hash_consed_apply/2'('closure_b/0', A))
; true
),
( var(A),
ground(apply(baked(closure_b), B))
-> hash_consing:intern(apply(baked(closure_b), B), '__hash_consed_apply/2'('closure_b/0', A))
; true
),
( var(A)
-> hash_consing:intern(apply(baked(closure_b), B), '__hash_consed_apply/2'('closure_b/0', A))
; true
)
).
step('__hash_consed_apply/2'('apply/2', A), spine(B, C, D)) :-
( nonvar(A)
-> hash_consing:intern(apply('__hash_consed_apply/2'(E, F), D), '__hash_consed_apply/2'('apply/2', A)),
hash_consing:intern(apply(B, C), '__hash_consed_apply/2'(E, F))
; ( nonvar(A)
-> hash_consing:intern(apply('__hash_consed_apply/2'(E, F), D), '__hash_consed_apply/2'('apply/2', A))
; true
),
( nonvar(F)
-> hash_consing:intern(apply(B, C), '__hash_consed_apply/2'(E, F))
; true
),
( var(F),
ground(apply(B, C))
-> hash_consing:intern(apply(B, C), '__hash_consed_apply/2'(E, F))
; true
),
( var(A),
ground(apply('__hash_consed_apply/2'(E, F), D))
-> hash_consing:intern(apply('__hash_consed_apply/2'(E, F), D), '__hash_consed_apply/2'('apply/2', A))
; true
),
( var(F)
-> hash_consing:intern(apply(B, C), '__hash_consed_apply/2'(E, F))
; true
),
( var(A)
-> hash_consing:intern(apply('__hash_consed_apply/2'(E, F), D), '__hash_consed_apply/2'('apply/2', A))
; true
)
).
predicate(callee/2)
callee('__hash_consed_apply/2'(A, B), C) :-
( nonvar(B)
-> hash_consing:intern(apply(C, D), '__hash_consed_apply/2'(A, B))
; ( nonvar(B)
-> hash_consing:intern(apply(C, D), '__hash_consed_apply/2'(A, B))
; true
),
( var(B),
ground(apply(C, D))
-> hash_consing:intern(apply(C, D), '__hash_consed_apply/2'(A, B))
; true
),
( var(B)
-> hash_consing:intern(apply(C, D), '__hash_consed_apply/2'(A, B))
; true
)
).
predicate(built/2)
built(A, B) :-
( ground([A])
-> hash_consing:intern(apply(A, baked(variable(0))), '__hash_consed_apply/2'(C, D)),
B='hash_consed_apply/2'(C, D)
; ( ground(apply(A, baked(variable(0))))
-> hash_consing:intern(apply(A, baked(variable(0))), 'hash_consed_apply/2'(C, D))
; true
),
B='hash_consed_apply/2'(C, D),
hash_consing:intern(apply(A, baked(variable(0))), 'hash_consed_apply/2'(C, D))
).
predicate(constant/1)
constant(baked(apply(lambda(variable(0)), closure_b))).
query(shape_of_an_id, true)
query(shape_of_a_zero_arity_callee, true)
query(dispatch_lambda, true)
query(dispatch_closure, true)
query(dispatch_zero_arity, true)
query(dispatch_spine, true)
query(one_answer_per_term, true)
query(partial_pattern_matches_every_shape, true)
query(body_goal_builds_the_shape, true)
query(ground_occurrence_baked, true)
query(same_content_same_id, true)
query(backward, true)
query(wrong_shape_does_not_unify, true)
query(spelling_remembered_once, true)
query(argument_that_is_no_id, true)
query(unground_term_raises, error(instantiation_error))
query(externalized_internalized_inverse, true)
fixture(spines)
predicate(head/2)
head('__hash_consed_apply/2'('apply/2(lambda/1)', A), redex_under_an_application) :-
( nonvar(A)
-> hash_consing:intern(apply('__hash_consed_apply/2'('lambda/1', B), C), '__hash_consed_apply/2'('apply/2(lambda/1)', A)),
hash_consing:intern(apply('__hash_consed_lambda/1'(D), E), '__hash_consed_apply/2'('lambda/1', B)),
hash_consing:intern(lambda(F), '__hash_consed_lambda/1'(D))
; ( nonvar(A)
-> hash_consing:intern(apply('__hash_consed_apply/2'('lambda/1', B), C), '__hash_consed_apply/2'('apply/2(lambda/1)', A))
; true
),
( nonvar(B)
-> hash_consing:intern(apply('__hash_consed_lambda/1'(D), E), '__hash_consed_apply/2'('lambda/1', B))
; true
),
( nonvar(D)
-> hash_consing:intern(lambda(F), '__hash_consed_lambda/1'(D))
; true
),
( var(D),
ground(lambda(F))
-> hash_consing:intern(lambda(F), '__hash_consed_lambda/1'(D))
; true
),
( var(B),
ground(apply('__hash_consed_lambda/1'(D), E))
-> hash_consing:intern(apply('__hash_consed_lambda/1'(D), E), '__hash_consed_apply/2'('lambda/1', B))
; true
),
( var(A),
ground(apply('__hash_consed_apply/2'('lambda/1', B), C))
-> hash_consing:intern(apply('__hash_consed_apply/2'('lambda/1', B), C), '__hash_consed_apply/2'('apply/2(lambda/1)', A))
; true
),
( var(D)
-> hash_consing:intern(lambda(F), '__hash_consed_lambda/1'(D))
; true
),
( var(B)
-> hash_consing:intern(apply('__hash_consed_lambda/1'(D), E), '__hash_consed_apply/2'('lambda/1', B))
; true
),
( var(A)
-> hash_consing:intern(apply('__hash_consed_apply/2'('lambda/1', B), C), '__hash_consed_apply/2'('apply/2(lambda/1)', A))
; true
)
).
head('__hash_consed_apply/2'('apply/2(closure_a/1)', A), compiled_redex_under_an_application) :-
( nonvar(A)
-> hash_consing:intern(apply('__hash_consed_apply/2'('closure_a/1', B), C), '__hash_consed_apply/2'('apply/2(closure_a/1)', A)),
hash_consing:intern(apply('__hash_consed_closure_a/1'(D), E), '__hash_consed_apply/2'('closure_a/1', B)),
hash_consing:intern(closure_a(F), '__hash_consed_closure_a/1'(D))
; ( nonvar(A)
-> hash_consing:intern(apply('__hash_consed_apply/2'('closure_a/1', B), C), '__hash_consed_apply/2'('apply/2(closure_a/1)', A))
; true
),
( nonvar(B)
-> hash_consing:intern(apply('__hash_consed_closure_a/1'(D), E), '__hash_consed_apply/2'('closure_a/1', B))
; true
),
( nonvar(D)
-> hash_consing:intern(closure_a(F), '__hash_consed_closure_a/1'(D))
; true
),
( var(D),
ground(closure_a(F))
-> hash_consing:intern(closure_a(F), '__hash_consed_closure_a/1'(D))
; true
),
( var(B),
ground(apply('__hash_consed_closure_a/1'(D), E))
-> hash_consing:intern(apply('__hash_consed_closure_a/1'(D), E), '__hash_consed_apply/2'('closure_a/1', B))
; true
),
( var(A),
ground(apply('__hash_consed_apply/2'('closure_a/1', B), C))
-> hash_consing:intern(apply('__hash_consed_apply/2'('closure_a/1', B), C), '__hash_consed_apply/2'('apply/2(closure_a/1)', A))
; true
),
( var(D)
-> hash_consing:intern(closure_a(F), '__hash_consed_closure_a/1'(D))
; true
),
( var(B)
-> hash_consing:intern(apply('__hash_consed_closure_a/1'(D), E), '__hash_consed_apply/2'('closure_a/1', B))
; true
),
( var(A)
-> hash_consing:intern(apply('__hash_consed_apply/2'('closure_a/1', B), C), '__hash_consed_apply/2'('apply/2(closure_a/1)', A))
; true
)
).
head('__hash_consed_apply/2'('lambda/1', A), redex) :-
( nonvar(A)
-> hash_consing:intern(apply('__hash_consed_lambda/1'(B), C), '__hash_consed_apply/2'('lambda/1', A)),
hash_consing:intern(lambda(D), '__hash_consed_lambda/1'(B))
; ( nonvar(A)
-> hash_consing:intern(apply('__hash_consed_lambda/1'(B), C), '__hash_consed_apply/2'('lambda/1', A))
; true
),
( nonvar(B)
-> hash_consing:intern(lambda(D), '__hash_consed_lambda/1'(B))
; true
),
( var(B),
ground(lambda(D))
-> hash_consing:intern(lambda(D), '__hash_consed_lambda/1'(B))
; true
),
( var(A),
ground(apply('__hash_consed_lambda/1'(B), C))
-> hash_consing:intern(apply('__hash_consed_lambda/1'(B), C), '__hash_consed_apply/2'('lambda/1', A))
; true
),
( var(B)
-> hash_consing:intern(lambda(D), '__hash_consed_lambda/1'(B))
; true
),
( var(A)
-> hash_consing:intern(apply('__hash_consed_lambda/1'(B), C), '__hash_consed_apply/2'('lambda/1', A))
; true
)
).
predicate(inner/2)
inner('__hash_consed_apply/2'(A, B), C) :-
( nonvar(B)
-> hash_consing:intern(apply('__hash_consed_apply/2'(D, E), F), '__hash_consed_apply/2'(A, B)),
hash_consing:intern(apply(C, G), '__hash_consed_apply/2'(D, E))
; ( nonvar(B)
-> hash_consing:intern(apply('__hash_consed_apply/2'(D, E), F), '__hash_consed_apply/2'(A, B))
; true
),
( nonvar(E)
-> hash_consing:intern(apply(C, G), '__hash_consed_apply/2'(D, E))
; true
),
( var(E),
ground(apply(C, G))
-> hash_consing:intern(apply(C, G), '__hash_consed_apply/2'(D, E))
; true
),
( var(B),
ground(apply('__hash_consed_apply/2'(D, E), F))
-> hash_consing:intern(apply('__hash_consed_apply/2'(D, E), F), '__hash_consed_apply/2'(A, B))
; true
),
( var(E)
-> hash_consing:intern(apply(C, G), '__hash_consed_apply/2'(D, E))
; true
),
( var(B)
-> hash_consing:intern(apply('__hash_consed_apply/2'(D, E), F), '__hash_consed_apply/2'(A, B))
; true
)
).
query(two_layers_in_the_shape, true)
query(template_ends_the_shape, true)
query(dispatch_two_layers, true)
query(dispatch_one_layer, true)
query(partial_pattern_still_right, true)
query(partial_pattern_rejects_a_redex, true)
fixture(plain)
predicate(doubled/2)
doubled(A, '__hash_consed_pair/2'(B)) :-
( nonvar(B)
-> hash_consing:intern(pair(A, A), '__hash_consed_pair/2'(B))
; ( nonvar(B)
-> hash_consing:intern(pair(A, A), '__hash_consed_pair/2'(B))
; true
),
( var(B),
ground(pair(A, A))
-> hash_consing:intern(pair(A, A), '__hash_consed_pair/2'(B))
; true
),
( var(B)
-> hash_consing:intern(pair(A, A), '__hash_consed_pair/2'(B))
; true
)
).
predicate(swapped/2)
swapped('__hash_consed_pair/2'(A), '__hash_consed_pair/2'(B)) :-
( nonvar(A),
nonvar(B)
-> hash_consing:intern(pair(C, D), '__hash_consed_pair/2'(B)),
hash_consing:intern(pair(D, C), '__hash_consed_pair/2'(A))
; ( nonvar(B)
-> hash_consing:intern(pair(C, D), '__hash_consed_pair/2'(B))
; true
),
( nonvar(A)
-> hash_consing:intern(pair(D, C), '__hash_consed_pair/2'(A))
; true
),
( var(A),
ground(pair(D, C))
-> hash_consing:intern(pair(D, C), '__hash_consed_pair/2'(A))
; true
),
( var(B),
ground(pair(C, D))
-> hash_consing:intern(pair(C, D), '__hash_consed_pair/2'(B))
; true
),
( var(A)
-> hash_consing:intern(pair(D, C), '__hash_consed_pair/2'(A))
; true
),
( var(B)
-> hash_consing:intern(pair(C, D), '__hash_consed_pair/2'(B))
; true
)
).
query(upsert_then_externalize, true)
query(same_content_same_id, true)
query(value_that_is_no_id_fails, false)
query(uninterned_instance_fails, false)
query(both_sides_unknown_raises, error(instantiation_error))
fixture(inner_dispatch)
query(dispatch_by_inner_constructor, true)
query(shape_indexed, true)
fixture(reconfigured)
load_error(permission_error(reconfigure,interned_constructor,apply/2))
load_error(directive_failed)