Ejemplo n.º 1
0
# ---------- Variables ---------- #
kv_map.variable('m')
kv_map.variable('n')

# Generic variables for map keys.
generic.variable('k')
generic.variable('l')

# Generic variables for map values.
generic.variable('v')
generic.variable('w')

# ---------- Rewrite rules ---------- #
# isempty(empty) -> true.
kv_map.rewrite_rule(
    kv_map.isempty(kv_map.empty()),
    # ->
    boolean.true())

# isempty(empty, add(m, k, v)) -> false.
kv_map.rewrite_rule(
    kv_map.isempty(kv_map.add(kv_map.m(), generic.k(), generic.v())),
    # ->
    boolean.false())

# add(add(m, k, v), k, w) -> add(m, k, w).
kv_map.rewrite_rule(
    kv_map.add(kv_map.add(kv_map.m(), generic.k(), generic.v()), generic.k(),
               generic.w()),
    # ->
    kv_map.add(kv_map.m(), generic.k(), generic.w()))
Ejemplo n.º 2
0
string.operation('empty', ())
string.operation('append', (string, char))
string.operation('concat', (string, string))

# Observers.
string.operation('equal', (string, string), boolean)

# ---------- String variables ---------- #
string.variable('s')
string.variable('t')

# ---------- Rewrite rules on strings ---------- #
string.rewrite_rules += char.rewrite_rules

# equal(empty, empty) -> true.
string.rewrite_rule(string.equal(string.empty(), string.empty()),
                    boolean.true())

# equal(empty, append(s, c)) -> false.
string.rewrite_rule(
    string.equal(string.empty(), string.append(string.s(), char.c1())),
    boolean.false())

# equal(append(s, c), empty) -> false.
string.rewrite_rule(
    string.equal(string.append(string.s(), char.c1()), string.empty()),
    boolean.false())

# equal(append(s, c), append(t, c)) -> equal(s, t).
string.rewrite_rule(
    string.equal(string.append(string.s(), char.c1()),