This library allows for stronger and more refined types in Elm for both library writer and end users.
Both "p1" and "p2" holds
"p1" or "p2" holds
A negation of a proof
Implies that if "p1" holds than "p2" holds
Used by library writers to create axioms with non-exported constructors. Remember, the library/module constructors must not be exported!
If a is proven to hold property p1 then classic logic gives that a holds either p1 or p2
Same as introOrR but introduces the p2 on the other side
A convience method to check two proofs for Or
A convience method to check two proofs at once for And
Used by library writers to show that when p1 does not hold for a then Not p1 holds.
Extract the actual value and remove the proof. This is always safe and a library writer should always expect and allow its users to do this.
If a library implies that when p1 holds the p2 holds then you have proven p2 by prove p1
Synonym for "modus ponens". If a library implies that when p1 holds the p2 holds then you have proven p2 by prove p1
If a library implies that when p1 holds the p2 holds then you have proven (Not p2) by prove (Not p1)
Synonym for "modus tollens". If a library implies that when p1 holds the p2 holds then you have proven (Not p2) by prove (Not p1)
Used by library writers to carefully ignore "impossible" states. Note use this with extreme care since this will cause a runtime exception if ever evaluated! Remember that Elm is an eager language and not lazy.
A value "a" that is proven to hold the property "b"