Kind2/base/Word/adder.kind
2021-03-29 17:24:23 -03:00

27 lines
997 B
Plaintext

Word.adder<size: Nat>(a: Word(size), b: Word(size), c: Bool): Word(size)
case a with b {
e: Word.e,
o: case b with a.pred: Word(Nat.pred(b.size)) {
e: Word.e,
o: case c {
true : Word.i<b.size>(Word.adder<b.size>(a.pred, b.pred, Bool.false)),
false: Word.o<b.size>(Word.adder<b.size>(a.pred, b.pred, Bool.false)),
},
i: case c {
true : Word.o<b.size>(Word.adder<b.size>(a.pred, b.pred, Bool.true)),
false: Word.i<b.size>(Word.adder<b.size>(a.pred, b.pred, Bool.false)),
}
}!
i: case b with a.pred: Word(Nat.pred(b.size)) {
e: Word.e,
o: case c {
true : Word.o<b.size>(Word.adder<b.size>(a.pred, b.pred, Bool.true)),
false: Word.i<b.size>(Word.adder<b.size>(a.pred, b.pred, Bool.false)),
},
i: case c {
true : Word.i<b.size>(Word.adder<b.size>(a.pred, b.pred, Bool.true)),
false: Word.o<b.size>(Word.adder<b.size>(a.pred, b.pred, Bool.true)),
}
}!
}!