[{"name":"BasicTheories.ListTheory","comment":" Some basic list proofs\n\n\n# Definition\n\n@docs NonEmptyList, SortedList\n\n\n# Proofs\n\n@docs proveNonEmptyList, mkSortedList\n\n\n# Functions\n\n@docs head, nonEmptyListMap, lengthOfNonEmptyList\n\n","unions":[{"name":"NonEmptyList","comment":" Basic logic\n","args":[],"cases":[]},{"name":"SortedList","comment":" Basic logic\n","args":[],"cases":[]}],"aliases":[],"values":[{"name":"head","comment":" Basic logic\n","type":"RefinementProofs.Proven (List.List a) BasicTheories.ListTheory.NonEmptyList -> a"},{"name":"lengthOfNonEmptyList","comment":" Basic logic\n","type":"RefinementProofs.Proven (List.List a) BasicTheories.ListTheory.NonEmptyList -> RefinementProofs.Proven Basics.Int BasicTheories.NumberTheory.Positive"},{"name":"mkSortedList","comment":" Basic logic\n","type":"List.List comparable -> RefinementProofs.Proven (List.List comparable) BasicTheories.ListTheory.SortedList"},{"name":"nonEmptyListMap","comment":" Basic logic\n","type":"(a -> b) -> RefinementProofs.Proven (List.List a) BasicTheories.ListTheory.NonEmptyList -> RefinementProofs.Proven (List.List b) BasicTheories.ListTheory.NonEmptyList"},{"name":"proveNonEmptyList","comment":" Basic logic\n","type":"List.List a -> Maybe.Maybe (RefinementProofs.Proven (List.List a) BasicTheories.ListTheory.NonEmptyList)"}],"binops":[]},{"name":"BasicTheories.NumberTheory","comment":" Some basic number proofs\n\n# Definition\n@docs Even\n    , Negative\n    , Odd\n    , Positive\n    , Zero\n    , ZeroOrGreater\n\n# Proofs\n@docs proveEven\n    , proveNegative\n    , proveOdd\n    , provePositive\n    , proveZeroOrGreater\n\n# Implications\n@docs allPositivesAreZeroOrGreater\n","unions":[{"name":"Even","comment":" Basic logic\n","args":[],"cases":[]},{"name":"Positive","comment":" Basic logic\n","args":[],"cases":[]},{"name":"Zero","comment":" Basic logic\n","args":[],"cases":[]}],"aliases":[{"name":"Negative","comment":" Basic logic\n","args":[],"type":"RefinementProofs.Not BasicTheories.NumberTheory.ZeroOrGreater"},{"name":"Odd","comment":" Basic logic\n","args":[],"type":"RefinementProofs.Not BasicTheories.NumberTheory.Even"},{"name":"ZeroOrGreater","comment":" Basic logic\n","args":[],"type":"RefinementProofs.Or BasicTheories.NumberTheory.Zero BasicTheories.NumberTheory.Positive"}],"values":[{"name":"allPositivesAreZeroOrGreater","comment":" Basic logic\n","type":"RefinementProofs.Implies BasicTheories.NumberTheory.Positive BasicTheories.NumberTheory.ZeroOrGreater"},{"name":"proveEven","comment":" Basic logic\n","type":"Basics.Int -> Maybe.Maybe (RefinementProofs.Proven Basics.Int BasicTheories.NumberTheory.Even)"},{"name":"proveNegative","comment":" Basic logic\n","type":"number -> Maybe.Maybe (RefinementProofs.Proven number BasicTheories.NumberTheory.Negative)"},{"name":"proveOdd","comment":" Basic logic\n","type":"Basics.Int -> Maybe.Maybe (RefinementProofs.Proven Basics.Int BasicTheories.NumberTheory.Odd)"},{"name":"provePositive","comment":" Basic logic\n","type":"number -> Maybe.Maybe (RefinementProofs.Proven number BasicTheories.NumberTheory.Positive)"},{"name":"proveZeroOrGreater","comment":" Basic logic\n","type":"number -> Maybe.Maybe (RefinementProofs.Proven number BasicTheories.NumberTheory.ZeroOrGreater)"}],"binops":[]},{"name":"BasicTheories.StringTheory","comment":" Some basic string proofs\n\n# Definition\n@docs NonEmptyString\n    , NonEmptyTrimmedString\n\n# Proofs\n@docs mkTrimmedString\n    , proveNonEmptyString\n    , proveNonEmptyTrimmedString\n    , proveTrimmedString\n\n# Functions\n@docs lengthOfNonEmptyString\n\n","unions":[{"name":"NonEmptyString","comment":" Basic logic\n","args":[],"cases":[]}],"aliases":[{"name":"NonEmptyTrimmedString","comment":" Basic logic\n","args":[],"type":"RefinementProofs.And BasicTheories.StringTheory.NonEmptyString BasicTheories.StringTheory.TrimmedString"}],"values":[{"name":"lengthOfNonEmptyString","comment":" Basic logic\n","type":"RefinementProofs.Proven String.String BasicTheories.StringTheory.NonEmptyString -> RefinementProofs.Proven Basics.Int BasicTheories.NumberTheory.Positive"},{"name":"mkTrimmedString","comment":" Basic logic\n","type":"String.String -> RefinementProofs.Proven String.String BasicTheories.StringTheory.TrimmedString"},{"name":"proveNonEmptyString","comment":" Basic logic\n","type":"String.String -> Maybe.Maybe (RefinementProofs.Proven String.String BasicTheories.StringTheory.NonEmptyString)"},{"name":"proveNonEmptyTrimmedString","comment":" Basic logic\n","type":"String.String -> Maybe.Maybe (RefinementProofs.Proven String.String BasicTheories.StringTheory.NonEmptyTrimmedString)"},{"name":"proveTrimmedString","comment":" Basic logic\n","type":"String.String -> Maybe.Maybe (RefinementProofs.Proven String.String BasicTheories.StringTheory.TrimmedString)"}],"binops":[]},{"name":"RefinementProofs","comment":" This library allows for stronger types in Elm for both library writer and end users\n\n# Definition\n@docs Proven\n\n# Logic operator types\n@docs And, Or, Not, XOr, Implies\n\n# Basic function\n@docs axiom, or, and, not\n\n# Logic operators\n@docs introOrR, introOrL, elimOrR, elimOrL, makeOr, makeAnd, provenOrInversed, inverse, elimAndL, elimAndR, exorcise, modusPonens, since, modusTollens, sinceNot, imply, absurd\n\n","unions":[{"name":"And","comment":" Both \"a\" and \"b\" holds\n","args":["a","b"],"cases":[]},{"name":"Implies","comment":" Implies that if \"a\" holds than \"b\" holds\n","args":["a","b"],"cases":[]},{"name":"Not","comment":" A negation of a proof\n","args":["a"],"cases":[]},{"name":"Or","comment":" \"a\" or \"b\" holds\n","args":["a","b"],"cases":[]},{"name":"Proven","comment":" A value \"a\" that is proven to hold the property \"b\"\n","args":["a","b"],"cases":[]}],"aliases":[{"name":"XOr","comment":" Exlusive or\n","args":["a","b"],"type":"RefinementProofs.Or (RefinementProofs.And a (RefinementProofs.Not b)) (RefinementProofs.And (RefinementProofs.Not a) b)"}],"values":[{"name":"absurd","comment":" Used by library writers to carefully ignore \"impossible\" states\n","type":"a"},{"name":"and","comment":" Used by library writers to create build a And proof\n","type":"p1 -> p2 -> RefinementProofs.And p1 p2"},{"name":"axiom","comment":" Used by library writers to create axioms with non-exported constructors\n","type":"p -> a -> RefinementProofs.Proven a p"},{"name":"elimAndL","comment":" Basic logic\n","type":"RefinementProofs.Proven a (RefinementProofs.And b c) -> RefinementProofs.Proven a b"},{"name":"elimAndR","comment":" Basic logic\n","type":"RefinementProofs.Proven a (RefinementProofs.And b c) -> RefinementProofs.Proven a c"},{"name":"elimOrL","comment":" Basic logic\n","type":"RefinementProofs.Proven a (RefinementProofs.Or b c) -> RefinementProofs.Proven a c"},{"name":"elimOrR","comment":" Basic logic\n","type":"RefinementProofs.Proven a (RefinementProofs.Or b c) -> RefinementProofs.Proven a b"},{"name":"exorcise","comment":" Extract the actual value and remove the proof\n","type":"RefinementProofs.Proven a b -> a"},{"name":"imply","comment":" Used by library writers to imply proof relations\n","type":"p1 -> p2 -> RefinementProofs.Implies p1 p2"},{"name":"introOrL","comment":" Basic logic\n","type":"RefinementProofs.Proven a p1 -> RefinementProofs.Proven a (RefinementProofs.Or p2 p1)"},{"name":"introOrR","comment":" Basic logic\n","type":"RefinementProofs.Proven a p1 -> RefinementProofs.Proven a (RefinementProofs.Or p1 p2)"},{"name":"inverse","comment":" Basic logic\n","type":"(a -> Maybe.Maybe (RefinementProofs.Proven a p1)) -> a -> Maybe.Maybe (RefinementProofs.Proven a (RefinementProofs.Not p1))"},{"name":"makeAnd","comment":" A convience method to check two proofs at once\n","type":"(a -> Maybe.Maybe (RefinementProofs.Proven a b)) -> (a -> Maybe.Maybe (RefinementProofs.Proven a c)) -> a -> Maybe.Maybe (RefinementProofs.Proven a (RefinementProofs.And b c))"},{"name":"makeOr","comment":" A convience method to check two proofs\n","type":"(a -> Maybe.Maybe (RefinementProofs.Proven a b)) -> (a -> Maybe.Maybe (RefinementProofs.Proven a c)) -> a -> Maybe.Maybe (RefinementProofs.Proven a (RefinementProofs.Or b c))"},{"name":"modusPonens","comment":" Basic logic\n","type":"RefinementProofs.Implies p1 p2 -> RefinementProofs.Proven a p1 -> RefinementProofs.Proven a p2"},{"name":"modusTollens","comment":" Basic logic\n","type":"RefinementProofs.Implies p1 p2 -> RefinementProofs.Proven a (RefinementProofs.Not p1) -> RefinementProofs.Proven a (RefinementProofs.Not p2)"},{"name":"not","comment":" Used by library writers to create build a Not proof\n","type":"p1 -> RefinementProofs.Not p1"},{"name":"or","comment":" Used by library writers to create build a Or proof\n","type":"p1 -> p2 -> RefinementProofs.Or p1 p2"},{"name":"provenOrInversed","comment":" Basic logic\n","type":"(a -> Maybe.Maybe (RefinementProofs.Proven a p1)) -> a -> Result.Result (RefinementProofs.Proven a (RefinementProofs.Not p1)) (RefinementProofs.Proven a p1)"},{"name":"since","comment":" Synonym for \"modus ponens\"\n","type":"RefinementProofs.Implies p1 p2 -> RefinementProofs.Proven a p1 -> RefinementProofs.Proven a p2"},{"name":"sinceNot","comment":" Synonym for \"modus tollens\" \n","type":"RefinementProofs.Implies p1 p2 -> RefinementProofs.Proven a (RefinementProofs.Not p1) -> RefinementProofs.Proven a (RefinementProofs.Not p2)"}],"binops":[]}]