Bernhard Reinke writes:
I think I have a sketch for an example of a magma satisfying 206 but not 1648. I use the translation
invariant approach, but for a non-commutative group: let
Our magma will be defined on G and will satisfy
x ◇ y = x f(x^{-1}y)
where
Then the RHS of 206 is
(x ◇ (x ◇ y)) ◇ y = (x ◇ (x f(x^{-1}y)) ◇ y = (x f(f(x^{-1} y))) ◇ y = x f(f(x^{-1} y)) f( (f(f(x^{-1} y))^{-1} x^{-1} y)
Setting
f(f(z)) = f( f(f(z)) z)
I claim the following f satisfies this: we set
f(1) = 1, f(a) = b, f(b) = c, f(c) = a
now, if
It is clear that
We have
For
I think 1648 translates to
I hope I haven't made any computational mistakes (this is in fact my second try, :sweat_smile: ), would someone like to check whether this makes sense? I don't think I would be able to formalize this in Lean myself.
Implementation notes #
This contains a self-contained development of the free product of three copies of the two-element group, by defining reduced words, a reduction function, and deriving enough API for it. In the end we define our magma of interest directly, so this free product group is not explicitly defined.
The development can easily be generalized to more than three copies if needed, just swap out Fin 3
.
Reduced words do not have the same element adjacent to each other
Equations
- ThreeC2.IsRed w = ∀ (i : ℕ) (h : i + 1 < List.length w), w[i] ≠ w[i + 1]
Instances For
The reduction function, nicely concrete and executable (for by decide
later) and somewhat
efficient (not that that matters).
Equations
- ThreeC2.red w = ThreeC2.red.go [] w
Instances For
Equations
- ThreeC2.red.go x [] = List.reverse x
- ThreeC2.red.go [] (x_2 :: xs) = ThreeC2.red.go [x_2] xs
- ThreeC2.red.go (y :: ys) (x_2 :: xs) = if x_2 = y then ThreeC2.red.go ys xs else ThreeC2.red.go (x_2 :: y :: ys) xs
Instances For
Equations
- ThreeC2.red.go_aux x✝ [] x = List.reverse x✝
- ThreeC2.red.go_aux [] (x_3 :: xs) x_4 = ThreeC2.red.go_aux [x_3] xs ⋯
- ThreeC2.red.go_aux (y :: ys) (x_3 :: xs) h = if heq : x_3 = y then ThreeC2.red.go_aux ys xs ⋯ else ThreeC2.red.go_aux (x_3 :: y :: ys) xs ⋯
Instances For
Instances For
We can reduce anywhere in a term. This is essentially a proof of confluence
The crucial step towards cancellation.
The crucial relation of that function
The magma instance
Equations
- One or more equations did not get rendered due to their size.
two variants of the main crucial relation
Equations
- ThreeC2.M2 = { x : ThreeC2.W × Bool // ThreeC2.IsRed x.1 }
Instances For
Equations
- One or more equations did not get rendered due to their size.