diff options
| author | Andreas Grois <andi@grois.info> | 2023-12-09 16:34:30 +0100 |
|---|---|---|
| committer | Andreas Grois <andi@grois.info> | 2023-12-09 16:34:30 +0100 |
| commit | ecbf7b27be05dc242f066e681dbe22c4274834f5 (patch) | |
| tree | cab87543d89619e18da875a2435f2c1c6da9acdd /Common/Euclid.lean | |
| parent | 244078f9f9e722aceafe64e745b9aa50136fb71a (diff) | |
Day 8 Part 2
Diffstat (limited to 'Common/Euclid.lean')
| -rw-r--r-- | Common/Euclid.lean | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/Common/Euclid.lean b/Common/Euclid.lean new file mode 100644 index 0000000..58c8210 --- /dev/null +++ b/Common/Euclid.lean @@ -0,0 +1,11 @@ +namespace Euclid +-- Extended Euclidean algorithm, stolen from Wikipedia. +-- The signature is stolen from Wikipedia too. As in, the values a and b are Nat, but s and t are Int. +def xgcd (a b: Nat) : Nat × Int × Int := + if p : b > 0 then + have : a % b < b := by simp[p, Nat.mod_lt] + let (d, ss, tt) := xgcd b (a%b) + (d, tt ,ss - tt * (a / b)) + else + (a,1,0) + termination_by xgcd a b => b |
