Module docstring
{"# Symmetric difference and bi-implication
This file defines the symmetric difference and bi-implication operators in (co-)Heyting algebras.
Examples
Some examples are
* The symmetric difference of two sets is the set of elements that are in either but not both.
* The symmetric difference on propositions is Xor'.
* The symmetric difference on Bool is Bool.xor.
* The equivalence of propositions. Two propositions are equivalent if they imply each other.
* The symmetric difference translates to addition when considering a Boolean algebra as a Boolean
ring.
Main declarations
symmDiff: The symmetric difference operator, defined as(a \\ b) ⊔ (b \\ a)bihimp: The bi-implication operator, defined as(b ⇨ a) ⊓ (a ⇨ b)
In generalized Boolean algebras, the symmetric difference operator is:
symmDiff_comm: commutative, andsymmDiff_assoc: associative.
Notations
a ∆ b:symmDiff a ba ⇔ b:bihimp a b
References
The proof of associativity follows the note \"Associativity of the Symmetric Difference of Sets: A Proof from the Book\" by John McCuan:
Tags
boolean ring, generalized boolean algebra, boolean algebra, symmetric difference, bi-implication,
Heyting
","CogeneralizedBooleanAlgebra isn't actually a typeclass, but the lemmas in here are dual to
the GeneralizedBooleanAlgebra ones ","### Prod ","### Pi "}