/* isolax.prb Alan Bundy 22.6.82 Description Space for Learning Isolate rule Syntactic Characterisation */ /* Description Space */ space(isolax, [occurstree, typetree]). /* Occurrence Tree */ tree(occurstree, 2, occurs_rel(free_of,contains(single_occ,mult_occ)) ). /* Type Tree */ tree(typetree, 1, expr(term(simple(constant,variable), function(minus,plus,addition,subtraction,multiplication,division)), formula(proposition(equality,inequality), complex(negation,disjunction,conjunction, implication(single_impl,double_impl)))) ). /* Examples */ specimen(minus, /* -u=v <-> u=-v */ [double_impl(rule), equality(expr_at([1],rule)), equality(expr_at([2],rule)), single_occ(expr_at([2,1],rule),expr_at([1,1],rule)), free_of(expr_at([2,1],rule),expr_at([1,2],rule)), free_of(expr_at([2,1],rule),expr_at([2,2],rule)), minus(expr_at([1,1],rule)), variable(expr_at([1,2],rule)), variable(expr_at([2,1],rule)), minus(expr_at([2,2],rule))] ). specimen(divide, /* u/v=w -> u=w*v */ [single_impl(rule), equality(expr_at([1],rule)), equality(expr_at([2],rule)), single_occ(expr_at([2,1],rule),expr_at([1,1],rule)), free_of(expr_at([2,1],rule),expr_at([1,2],rule)), free_of(expr_at([2,1],rule),expr_at([2,2],rule)), division(expr_at([1,1],rule)), variable(expr_at([1,2],rule)), variable(expr_at([2,1],rule)), multiplication(expr_at([2,2],rule))] ). /* Near Misses */ specimen(disjunct, /* -u=v v u=-v false! */ [disjunction(rule), equality(expr_at([1],rule)), equality(expr_at([2],rule)), single_occ(expr_at([2,1],rule),expr_at([1,1],rule)), free_of(expr_at([2,1],rule),expr_at([1,2],rule)), free_of(expr_at([2,1],rule),expr_at([2,2],rule)), minus(expr_at([1,1],rule)), variable(expr_at([1,2],rule)), variable(expr_at([2,1],rule)), minus(expr_at([2,2],rule))] ). specimen(ineq1, /* -u>= <-> u=-v false! */ [double_impl(rule), inequality(expr_at([1],rule)), equality(expr_at([2],rule)), single_occ(expr_at([2,1],rule),expr_at([1,1],rule)), free_of(expr_at([2,1],rule),expr_at([1,2],rule)), free_of(expr_at([2,1],rule),expr_at([2,2],rule)), minus(expr_at([1,1],rule)), variable(expr_at([1,2],rule)), variable(expr_at([2,1],rule)), minus(expr_at([2,2],rule))] ). specimen(ineq2, /* -u=v -> u=<-v */ [single_impl(rule), equality(expr_at([1],rule)), inequality(expr_at([2],rule)), single_occ(expr_at([2,1],rule),expr_at([1,1],rule)), free_of(expr_at([2,1],rule),expr_at([1,2],rule)), free_of(expr_at([2,1],rule),expr_at([2,2],rule)), minus(expr_at([1,1],rule)), variable(expr_at([1,2],rule)), variable(expr_at([2,1],rule)), minus(expr_at([2,2],rule))] ). specimen(collect, /* u+u=v <-> u=v/2 */ [double_impl(rule), equality(expr_at([1],rule)), equality(expr_at([2],rule)), mult_occ(expr_at([2,1],rule),expr_at([1,1],rule)), free_of(expr_at([2,1],rule),expr_at([1,2],rule)), free_of(expr_at([2,1],rule),expr_at([2,2],rule)), addition(expr_at([1,1],rule)), variable(expr_at([1,2],rule)), variable(expr_at([2,1],rule)), division(expr_at([2,2],rule))] ). specimen(zero, /* -u=u <-> u=0+0 */ [double_impl(rule), equality(expr_at([1],rule)), equality(expr_at([2],rule)), single_occ(expr_at([2,1],rule),expr_at([1,1],rule)), single_occ(expr_at([2,1],rule),expr_at([1,2],rule)), free_of(expr_at([2,1],rule),expr_at([2,2],rule)), minus(expr_at([1,1],rule)), variable(expr_at([1,2],rule)), variable(expr_at([2,1],rule)), addition(expr_at([2,2],rule))] ). specimen(cancel, /* -u=v <-> u=u-u-v */ [double_impl(rule), equality(expr_at([1],rule)), equality(expr_at([2],rule)), single_occ(expr_at([2,1],rule),expr_at([1,1],rule)), free_of(expr_at([2,1],rule),expr_at([1,2],rule)), mult_occ(expr_at([2,1],rule),expr_at([2,2],rule)), minus(expr_at([1,1],rule)), variable(expr_at([1,2],rule)), variable(expr_at([2,1],rule)), subtraction(expr_at([2,2],rule))] ). specimen(taut, /* u=v <-> u=+v */ [double_impl(rule), equality(expr_at([1],rule)), equality(expr_at([2],rule)), single_occ(expr_at([2,1],rule),expr_at([1,1],rule)), free_of(expr_at([2,1],rule),expr_at([1,2],rule)), free_of(expr_at([2,1],rule),expr_at([2,2],rule)), variable(expr_at([1,1],rule)), variable(expr_at([1,2],rule)), variable(expr_at([2,1],rule)), plus(expr_at([2,2],rule))] ). specimen(spec, /* -u=0 <-> u=+0 */ [double_impl(rule), equality(expr_at([1],rule)), equality(expr_at([2],rule)), single_occ(expr_at([2,1],rule),expr_at([1,1],rule)), free_of(expr_at([2,1],rule),expr_at([1,2],rule)), free_of(expr_at([2,1],rule),expr_at([2,2],rule)), minus(expr_at([1,1],rule)), constant(expr_at([1,2],rule)), variable(expr_at([2,1],rule)), plus(expr_at([2,2],rule))] ). specimen(const, /* -5=v <-> 5=-v */ [double_impl(rule), equality(expr_at([1],rule)), equality(expr_at([2],rule)), single_occ(expr_at([2,1],rule),expr_at([1,1],rule)), free_of(expr_at([2,1],rule),expr_at([1,2],rule)), free_of(expr_at([2,1],rule),expr_at([2,2],rule)), minus(expr_at([1,1],rule)), variable(expr_at([1,2],rule)), constant(expr_at([2,1],rule)), minus(expr_at([2,2],rule))] ). specimen(plus, /* +u=v <-> u=v */ [double_impl(rule), equality(expr_at([1],rule)), equality(expr_at([2],rule)), single_occ(expr_at([2,1],rule),expr_at([1,1],rule)), free_of(expr_at([2,1],rule),expr_at([1,2],rule)), free_of(expr_at([2,1],rule),expr_at([2,2],rule)), plus(expr_at([1,1],rule)), variable(expr_at([1,2],rule)), variable(expr_at([2,1],rule)), variable(expr_at([2,2],rule))] ).