Mercurial > hg > Members > kono > Proof > category
changeset 146:945f26ed12d5
assuing ∀{x : Carrier Mono } {f g : Carrier Mono -> Carrier Mono } -> (f x ≡ g x) -> ( f ≡ g )
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 15 Aug 2013 03:34:00 +0900 |
parents | 57df6cb8f253 |
children | eabd1685139a |
files | HomReasoning.agda monoid-monad.agda |
diffstat | 2 files changed, 54 insertions(+), 26 deletions(-) [+] |
line wrap: on
line diff
--- a/HomReasoning.agda Wed Aug 14 22:45:50 2013 +0900 +++ b/HomReasoning.agda Thu Aug 15 03:34:00 2013 +0900 @@ -116,7 +116,7 @@ → A [ A [ FMap G f o TMap η a ] ≈ A [ TMap η b o FMap F f ] ] nat η = IsNTrans.commute ( isNTrans η ) - infixr 2 _∎ + infixr 2 _∎ infixr 2 _≈⟨_⟩_ _≈⟨⟩_ infix 1 begin_ @@ -136,12 +136,20 @@ x ≈ y → y IsRelatedTo z → x IsRelatedTo z _ ≈⟨ x≈y ⟩ relTo y≈z = relTo (trans-hom x≈y y≈z) + + _≈↑⟨_⟩_ : { a b : Obj A } ( x : Hom A a b ) → { y z : Hom A a b } → + y ≈ x → y IsRelatedTo z → x IsRelatedTo z + _≈↑⟨_⟩_ _ x≈y (relTo y≈z) = relTo (trans-hom (sym x≈y) y≈z) + + infixr 2 _≈↑⟨_⟩_ + _≈⟨⟩_ : { a b : Obj A } ( x : Hom A a b ) → { y : Hom A a b } → x IsRelatedTo y → x IsRelatedTo y _ ≈⟨⟩ x∼y = x∼y _∎ : { a b : Obj A } ( x : Hom A a b ) → x IsRelatedTo x _∎ _ = relTo refl-hom + -- an example Lemma61 : {c₁ c₂ ℓ : Level} (A : Category c₁ c₂ ℓ) →
--- a/monoid-monad.agda Wed Aug 14 22:45:50 2013 +0900 +++ b/monoid-monad.agda Thu Aug 15 03:34:00 2013 +0900 @@ -1,8 +1,7 @@ open import Category -- https://github.com/konn/category-agda -open import Category.Monoid open import Algebra open import Level -module monoid-monad {c c₁ c₂ ℓ : Level} { Mono : Monoid c ℓ} where +module monoid-monad {c c₁ c₂ ℓ : Level} where open import Algebra.Structures open import HomReasoning @@ -13,7 +12,22 @@ open import Relation.Binary.Core open import Relation.Binary -open Monoid +-- open Monoid +open import Algebra.FunctionProperties using (Op₁; Op₂) + + +record ≡-Monoid c : Set (suc c) where + infixl 7 _∙_ + field + Carrier : Set c + _∙_ : Op₂ Carrier + ε : Carrier + isMonoid : IsMonoid _≡_ _∙_ ε + open IsMonoid isMonoid public + +postulate Mono : ≡-Monoid c +open ≡-Monoid + -- T : A → (M x A) @@ -28,7 +42,7 @@ } } where cong1 : {ℓ′ : Level} → {a b : Set ℓ′} { f g : Hom (Sets {ℓ′}) a b} → - Sets [ f ≈ g ] → Sets [ map (λ x → x) f ≈ map (λ x → x) g ] + Sets [ f ≈ g ] → Sets [ map (λ (x : Carrier Mono) → x) f ≈ map (λ (x : Carrier Mono) → x) g ] cong1 _≡_.refl = _≡_.refl open Functor @@ -77,30 +91,35 @@ open NTrans --- Lemma-MM32 : ∀{ℓ} {a : Set ℓ } -> {f g : a -> a } -> {x : a } -> ( _≈_ Mono f g ) -> ( ( λ x → f x ) ≡ ( λ x → g x ) ) --- Lemma-MM32 eq = cong ( \f -> \x -> f x ) eq - ---cong-≈ : { a b : Carrier Mono } → (f : Carrier Mono -> Carrier Mono ) → --- _≈_ Mono a b → _≈_ Mono (f a) (f b) ---cong-≈ f eq = {!!} - Lemma-MM33 : {a : Level} {b : Level} {A : Set a} {B : A → Set b} {x : Σ A B } → (((proj₁ x) , proj₂ x ) ≡ x ) Lemma-MM33 = _≡_.refl -Lemma-M-34 : { x : Carrier Mono } -> _≈_ Mono ((_∙_ Mono (ε Mono) x)) x -Lemma-M-34 {x} = ( proj₁ ( IsMonoid.identity ( isMonoid Mono )) ) x +Lemma-MM34 : { x : Carrier Mono } -> ( (Mono ∙ ε Mono) x ≡ x ) +Lemma-MM34 {x} = ( proj₁ ( IsMonoid.identity ( isMonoid Mono )) ) x + +Lemma-MM35 : { x : Carrier Mono } -> ((Mono ∙ x) (ε Mono)) ≡ x +Lemma-MM35 {x} = ( proj₂ ( IsMonoid.identity ( isMonoid Mono )) ) x -Lemma-M-35 : { x : Carrier Mono } -> _≈_ Mono ((_∙_ Mono x (ε Mono))) x -Lemma-M-35 {x} = ( proj₂ ( IsMonoid.identity ( isMonoid Mono )) ) x +Lemma-MM36 : { x y z : Carrier Mono } -> ((Mono ∙ (Mono ∙ x) y) z) ≡ (_∙_ Mono x (_∙_ Mono y z ) ) +Lemma-MM36 {x} {y} {z} = ( IsMonoid.assoc ( isMonoid Mono )) x y z + +-- We cannot prove this ... +-- Lemma-MM38 : ∀{x : Carrier Mono } {f g : Carrier Mono -> Carrier Mono } -> (f x ≡ g x) -> (( λ x -> f x) ≡ (λ x -> g x) ) +-- Lemma-MM38 {x} {f} {g} eq = {!!} -Lemma-M-36 : { x y z : Carrier Mono } -> _≈_ Mono (_∙_ Mono (_∙_ Mono x y ) z ) (_∙_ Mono x (_∙_ Mono y z ) ) -Lemma-M-36 {x} {y} {z} = ( IsMonoid.assoc ( isMonoid Mono )) x y z +postulate Lemma-MM39 : ∀{x : Carrier Mono } {f g : Carrier Mono -> Carrier Mono } -> (f x ≡ g x) -> ( f ≡ g ) + +postulate Lemma-MM40 : ∀{x y z : Carrier Mono } {f g : Carrier Mono -> Carrier Mono -> Carrier Mono -> Carrier Mono } -> + (f x y z ≡ g x y z ) -> ( f ≡ g ) -≡-to≈ : { f g : Carrier Mono } -> f ≡ g -> _≈_ Mono f g -≡-to≈ _≡_.refl = IsEquivalence.refl (IsMonoid.isEquivalence (isMonoid Mono ) ) +Lemma-MM9 : ( \(x : Carrier Mono) -> ( Mono ∙ ε Mono ) x ) ≡ ( \(x : Carrier Mono) -> x ) +Lemma-MM9 = Lemma-MM39 Lemma-MM34 -Lemma-M-37 : { a x y : Set } ( f g : Set -> Carrier Mono ) -> ( _≈_ Mono ( f a ) ( g a) ) -> ( f x , y ) ≡ ( g x , y ) -Lemma-M-37 f g eq = ? +Lemma-MM10 : ( \x -> ((Mono ∙ x) (ε Mono))) ≡ ( \x -> x ) +Lemma-MM10 = Lemma-MM39 Lemma-MM35 + +Lemma-MM11 : (\x y z -> ((Mono ∙ (Mono ∙ x) y) z)) ≡ (\x y z -> ( _∙_ Mono x (_∙_ Mono y z ) )) +Lemma-MM11 = Lemma-MM40 Lemma-MM36 MonoidMonad : Monad (Sets {c ⊔ c₁ ⊔ c₂ ⊔ ℓ }) T η μ MonoidMonad = record { @@ -117,7 +136,7 @@ TMap μ a o TMap η ( FObj T a ) ≈⟨⟩ ( λ x → ((Mono ∙ ε Mono) (proj₁ x) , proj₂ x )) - ≈⟨ cong ( \f -> ( \x -> ( f (proj₁ x) ) , proj₂ x )) ( _≡_.refl ) ⟩ + ≈⟨ cong ( \f -> ( \x -> ( ( f (proj₁ x) ) , proj₂ x ))) ( Lemma-MM9 ) ⟩ ( λ x → (proj₁ x) , proj₂ x ) ≈⟨⟩ ( λ x → x ) @@ -130,7 +149,7 @@ TMap μ a o (FMap T (TMap η a )) ≈⟨⟩ ( λ x → (Mono ∙ proj₁ x) (ε Mono) , proj₂ x ) - ≈⟨ cong ( \f -> ( \x -> ( f (proj₁ x) ) , proj₂ x )) ( _≡_.refl ) ⟩ + ≈⟨ cong ( \f -> ( \x -> ( f (proj₁ x) ) , proj₂ x )) ( Lemma-MM10 ) ⟩ ( λ x → (proj₁ x) , proj₂ x ) ≈⟨⟩ ( λ x → x ) @@ -143,8 +162,9 @@ TMap μ a o TMap μ ( FObj T a ) ≈⟨⟩ ( λ x → (Mono ∙ (Mono ∙ proj₁ x) (proj₁ (proj₂ x))) (proj₁ (proj₂ (proj₂ x))) , proj₂ (proj₂ (proj₂ x))) - -- ≈⟨ (\x -> Lemma-M-36 ( proj₁ x ) ((proj₁ (proj₂ x))) ((proj₁ (proj₂ (proj₂ x))) )) ⟩ - ≈⟨ {!!} ⟩ + ≈⟨ cong ( \f -> ( \x -> + (( f ( proj₁ x ) ((proj₁ (proj₂ x))) ((proj₁ (proj₂ (proj₂ x))) )) , proj₂ (proj₂ (proj₂ x)) ) + )) Lemma-MM11 ⟩ ( λ x → (Mono ∙ proj₁ x) ((Mono ∙ proj₁ (proj₂ x)) (proj₁ (proj₂ (proj₂ x)))) , proj₂ (proj₂ (proj₂ x))) ≈⟨⟩ TMap μ a o FMap T (TMap μ a)