Andrea Amantini / Jan 05 2019
Bourbaki LaTTe
Bourbaki LaTTe
(ns latte-bourbaki (:refer-clojure :exclude [and or not set complement]) (:require [latte.core :refer [defthm defaxiom definition example lambda try-proof proof assume have pose qed type-of type-check?]] [latte-prelude.quant :refer [ex exists ex-elim] :as q] [latte-prelude.classic :as classic] [latte-prelude.prop :refer [and or not absurd] :as prop] [latte-prelude.equal :refer [equal] :as e] [latte-sets.core :refer [set elem set-equal set-equal-prop forall-in] :as sets] [latte-sets.algebra :refer [complement]] [latte-sets.rel :refer [rel]] [latte-sets.pfun :refer [pfun]]))
We might look at a theory of full groups, i.e. the set support of the group will coincide with the set of all inhabitants of G.
(definition magma "A bourbakian Magma over the type T" [[T :type]] (==> T T T))
3[:defined,:term,magma]
(clojure.repl/source example)
(example [[T :type][m (magma T)][x T][y T]] T (qed (m x y)))
2[:checked,:example]
(definition associative "" [[T :type][m (magma T)]] (forall [x y z T] (equal (m x (m y z)) (m (m x y) z))))
3[:defined,:term,associative]
(definition monoid "A Monoid is an associative magma with an Identity" [[T :type][m (magma T)][e T]] (and (associative T m) (forall [x T] (and (equal x (m x e)) (equal x (m e x))))))
3[:defined,:term,monoid]
(definition group "A group is a Monoid with inverses" [[T :type][m (magma T)][e T][i (==> T T)]] (and (monoid T m e) (forall [x T] (and (equal e (m (i x) x)) (equal e (m x (i x)))))))
3[:defined,:term,group]
(definition subgroup "A set closed under multiplication and inverses" [[G :type][m (magma G)][e G][i (==> G G)][H (set G)]] (and (group G m e i) (and (elem e H) (forall-in [x G H] (forall-in [y G H] (elem (m (i y) x) H))))))
3[:defined,:term,subgroup]