0 | module Algebra.Solver.Semiring.Util
2 | import Algebra.Semiring
3 | import public Syntax.PreorderReasoning
8 | 0 p213 : Semiring a => {k,m,n : a} -> k + (m + n) === m + (k + n)
11 | ~~ (k + m) + n ... plusAssociative
12 | ~~ (m + k) + n ... cong (+n) plusCommutative
13 | ~~ m + (k + n) ..< plusAssociative
17 | {auto _ : Semiring a}
19 | -> (k + l) + (m + n) === (k + m) + (l + n)
21 | |~ (k + l) + (m + n)
22 | ~~ ((k + l) + m) + n ... plusAssociative
23 | ~~ (k + (l + m)) + n ..< cong (+n) plusAssociative
24 | ~~ (k + (m + l)) + n ... cong (\x => (k + x) + n) plusCommutative
25 | ~~ ((k + m) + l) + n ... cong (+n) plusAssociative
26 | ~~ (k + m) + (l + n) ..< plusAssociative
30 | {auto _ : Semiring a}
32 | -> (k * l) * (m * n) === (k * m) * (l * n)
34 | |~ (k * l) * (m * n)
35 | ~~ ((k * l) * m) * n ... multAssociative
36 | ~~ (k * (l * m)) * n ..< cong (*n) multAssociative
37 | ~~ (k * (m * l)) * n ... cong (\x => (k * x) * n) multCommutative
38 | ~~ ((k * m) * l) * n ... cong (*n) multAssociative
39 | ~~ (k * m) * (l * n) ..< multAssociative