23 lines
580 B
Plaintext
23 lines
580 B
Plaintext
|
module prop-desugar
|
||
|
imports libstrategolib signatures/-
|
||
|
|
||
|
rules
|
||
|
|
||
|
DefN : Not(x) -> Impl(x, False())
|
||
|
DefI : Impl(x, y) -> Or(Not(x), y)
|
||
|
DefE : Eq(x, y) -> And(Impl(x, y), Impl(y, x))
|
||
|
DefO1 : Or(x, y) -> Impl(Not(x), y)
|
||
|
DefO2 : Or(x, y) -> Not(And(Not(x), Not(y)))
|
||
|
DefA1 : And(x, y) -> Not(Or(Not(x), Not(y)))
|
||
|
DefA2 : And(x, y) -> Not(Impl(x, Not(y)))
|
||
|
|
||
|
IDefI : Or(Not(x), y) -> Impl(x, y)
|
||
|
|
||
|
IDefE : And(Impl(x, y), Impl(y, x)) -> Eq(x, y)
|
||
|
|
||
|
strategies
|
||
|
|
||
|
desugar = topdown(try(DefI <+ DefE))
|
||
|
|
||
|
impl-nf = topdown(repeat(DefN <+ DefA2 <+ DefO1 <+ DefE))
|