OAI/Computability/RationalHitting/BinarySubtract.lean
26 declarations, 0 contain sorry, 0 declared as axioms
- def
OAI.RationalHitting.StackLanguage.mulAccWordline 9Source documentation
Shift-and-add on explicit little-endian words.
def mulAccWord : List Bool → List Bool → List Bool → List Bool | _a, [], c => c | a, false::b, c => mulAccWord (false::a) b c | a, true::b, c => mulAccWord (false::a) b (addWord c a)
- theorem
OAI.RationalHitting.StackLanguage.mulAccWord_valueline 14 - lemma
OAI.RationalHitting.StackLanguage.mulAccWord_lengthline 20 - def
OAI.RationalHitting.StackLanguage.mulBodyline 38Source documentation
Registers: 0 multiplicand, 1 multiplier, 2 accumulator, 3 copied addend, 4/5/6 addition scratch, 7 copy scratch.
def mulBody : Program (Fin 8) := .branch 1 .skip …
- def
OAI.RationalHitting.StackLanguage.mulLoopline 42 - lemma
OAI.RationalHitting.StackLanguage.eval_mulLoopline 44 - def
OAI.RationalHitting.StackLanguage.multiplyline 134Source documentation
The normalized multiplication instruction; the accumulator starts at zero. After execution register 2 is the canonical binary product.
def multiply : Program (Fin 8) := .seq mulLoop (normalize 2 5 6)
Mentions: OAI.RationalHitting.StackLanguage.Program, OAI.RationalHitting.StackLanguage.mulLoop, OAI.RationalHitting.StackLanguage.normalize
- lemma
OAI.RationalHitting.StackLanguage.eval_multiplyline 136 - lemma
OAI.RationalHitting.StackLanguage.wordValue_ltline 164 - lemma
OAI.RationalHitting.StackLanguage.product_bits_lengthline 169 - def
OAI.RationalHitting.StackLanguage.differenceBitline 180Source documentation
Boolean full-subtractor gate.
def differenceBit (x y c : Bool) : Bool := (x ^^ y) ^^ c
- def
OAI.RationalHitting.StackLanguage.borrowBitline 181 - def
OAI.RationalHitting.StackLanguage.bitNatline 182 - lemma
OAI.RationalHitting.StackLanguage.bitNat_falseline 183 - lemma
OAI.RationalHitting.StackLanguage.wordValue_bitline 184 - lemma
OAI.RationalHitting.StackLanguage.wordValue_nilline 185 - lemma
OAI.RationalHitting.StackLanguage.digit_subtractline 187 - def
OAI.RationalHitting.StackLanguage.subtractWordline 194Source documentation
Fixed-width subtraction, returning the overflow borrow. Registers may have leading zeros. Width is exactly the larger input word length.
def subtractWord : List Bool → List Bool → Bool → List Bool × Bool | [],[],c => ([],c) | x::a,b,c => let u := subtractWord a b.tail (borrowBit x (b.headD false) c) … - lemma
OAI.RationalHitting.StackLanguage.subtractWord_lengthline 203 - lemma
OAI.RationalHitting.StackLanguage.subtractWord_valueline 211 - lemma
OAI.RationalHitting.StackLanguage.subtractWord_borrowline 229 - lemma
OAI.RationalHitting.StackLanguage.subtractWord_nonnegativeline 238 - def
OAI.RationalHitting.StackLanguage.readBitline 251 - lemma
OAI.RationalHitting.StackLanguage.eval_readBitline 252 - def
OAI.RationalHitting.StackLanguage.subtractDigitline 262Source documentation
Registers 0,1 input, 2 reverse output, 3 singleton borrow, 4 loop flag.
def subtractDigit : Program (Fin 5) := …
- lemma
OAI.RationalHitting.StackLanguage.eval_subtractDigitline 267