-
Notifications
You must be signed in to change notification settings - Fork 242
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add new Bool
action on a RawMonoid
plus properties
#2450
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,6 +7,7 @@ | |
{-# OPTIONS --cubical-compatible --safe #-} | ||
|
||
open import Algebra.Bundles using (RawMonoid) | ||
open import Data.Bool.Base as Bool using (Bool; true; false; if_then_else_) | ||
open import Data.Nat.Base as ℕ using (ℕ; zero; suc) | ||
open import Data.Vec.Functional as Vector using (Vector) | ||
|
||
|
@@ -21,7 +22,7 @@ open RawMonoid M renaming ( _∙_ to _+_ ; ε to 0# ) | |
open import Algebra.Definitions.RawMagma rawMagma public | ||
|
||
------------------------------------------------------------------------ | ||
-- Multiplication by natural number | ||
-- Multiplication by natural number: action of the (0,+)-rawMonoid | ||
------------------------------------------------------------------------ | ||
-- Standard definition | ||
|
||
|
@@ -65,3 +66,18 @@ suc n ×′ x = n ×′ x + x | |
|
||
sum : ∀ {n} → Vector Carrier n → Carrier | ||
sum = Vector.foldr _+_ 0# | ||
|
||
------------------------------------------------------------------------ | ||
-- 'Conjunction' with a Boolean: action of the Boolean (true,∧)-rawMonoid | ||
------------------------------------------------------------------------ | ||
|
||
infixr 8 _∧_ | ||
|
||
_∧_ : Bool → Carrier → Carrier | ||
b ∧ x = if b then x else 0# | ||
|
||
-- tail-recursive optimisation | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. optimisation of what? It doesn't seem like an optimisation of the above? What am I missing? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. As with the TCOptimised forms of (monoid) sum and multiplication, the 'optimisation' lies in avoiding having to explicitly track terms of the form There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. As witnessed by There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It still feels like a stretch. I do like the optimization of an action not doing a (statically known) null operation, a lot. I'm still worried that this particular case is a coincidence rather than fundamental! There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Well I think it extends to the |
||
infixl 8 _∧′_∙_ | ||
|
||
_∧′_∙_ : Bool → Carrier → Carrier → Carrier | ||
b ∧′ x ∙ y = if b then x + y else y |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Strictly speaking, this could be defined for any
Pointed
structure with an apartness relation, as an action on aPointed
structure.How is the above 'conjuction'?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OK, I think that's fair... I was being pretty ad hoc in wanting to add this by analogy with the
Nat
action already defined there, as then these two instances of a phenomenon (eventually: wreath product) are the relevant ones for theAlgebra.Solver.*CommutativeMonoid
refactorings #2407 #2457 ... and I'm still unhappy about the general picture forPointed
things in the library, so don't (yet) want to reopen that can of worms...As for it being 'conjunction', well it clearly generalises it: for
Carrier
being that of theMonoid
structure onBool
given by_∨_
with unitfalse
,b ∧ x = if b then x else false
is a definition of 'conjunction'... yes!?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, that is the operational definition of 'conjunction' on
Bool
.I guess that I was thinking along the lines of "if b is the least element then x else some-distinguished-point" as the general meaning. It feels more action-y. 'conjunction' feels like it's a coincidence when
Carrier
isBool
.