2014-08-01 01:40:09 +00:00
|
|
|
----------------------------------------------------------------------------------------------------
|
2014-07-25 00:46:41 +00:00
|
|
|
-- Copyright (c) 2014 Microsoft Corporation. All rights reserved.
|
|
|
|
-- Released under Apache 2.0 license as described in the file LICENSE.
|
|
|
|
-- Author: Leonardo de Moura
|
2014-08-01 01:40:09 +00:00
|
|
|
----------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
import logic.connectives.eq
|
2014-07-25 05:49:12 +00:00
|
|
|
using eq_proofs
|
2014-07-25 00:46:41 +00:00
|
|
|
|
|
|
|
namespace binary
|
|
|
|
section
|
|
|
|
parameter {A : Type}
|
|
|
|
parameter f : A → A → A
|
|
|
|
infixl `*`:75 := f
|
|
|
|
|
|
|
|
abbreviation commutative := ∀a b, a*b = b*a
|
|
|
|
abbreviation associative := ∀a b c, (a*b)*c = a*(b*c)
|
|
|
|
end
|
|
|
|
|
|
|
|
section
|
|
|
|
parameter {A : Type}
|
|
|
|
parameter {f : A → A → A}
|
|
|
|
infixl `*`:75 := f
|
|
|
|
hypothesis H_comm : commutative f
|
|
|
|
hypothesis H_assoc : associative f
|
|
|
|
|
2014-07-29 02:58:57 +00:00
|
|
|
theorem left_comm : ∀a b c, a*(b*c) = b*(a*c) :=
|
|
|
|
take a b c, calc
|
|
|
|
a*(b*c) = (a*b)*c : (H_assoc _ _ _)⁻¹
|
|
|
|
... = (b*a)*c : {H_comm _ _}
|
|
|
|
... = b*(a*c) : H_assoc _ _ _
|
2014-07-25 00:46:41 +00:00
|
|
|
|
2014-07-29 02:58:57 +00:00
|
|
|
theorem right_comm : ∀a b c, (a*b)*c = (a*c)*b :=
|
|
|
|
take a b c, calc
|
|
|
|
(a*b)*c = a*(b*c) : H_assoc _ _ _
|
|
|
|
... = a*(c*b) : {H_comm _ _}
|
|
|
|
... = (a*c)*b : (H_assoc _ _ _)⁻¹
|
2014-07-25 00:46:41 +00:00
|
|
|
end
|
2014-08-07 23:59:08 +00:00
|
|
|
end binary
|