The following page lists all tests run using the example converter in this repository, which was built to verify that the language-building and conversion tools in this repository work. It can convert among LaTeX, putdown, and JSON formats (as of this writing). The specific conversions it performed (to satisfy the requirements of the test suite) are shown below.
Table of contents
- Parsing putdown
- Rendering JSON into putdown
- Parsing LaTeX
- Rendering JSON into LaTeX
- Converting putdown to LaTeX
- Converting LaTeX to putdown
- Parsing MathLive-style LaTeX
Parsing putdown
can convert putdown numbers to JSON
- Test 1
- input: putdown
0
- output: JSON
["Number","0"]
- input: putdown
- Test 2
- input: putdown
453789
- output: JSON
["Number","453789"]
- input: putdown
- Test 3
- input: putdown
99999999999999999999999999999999999999999
- output: JSON
["Number","99999999999999999999999999999999999999999"]
- input: putdown
- Test 4
- input: putdown
(- 453789)
- output: JSON
["NumberNegation",["Number","453789"]]
- input: putdown
- Test 5
- input: putdown
(- 99999999999999999999999999999999999999999)
- output: JSON
["NumberNegation",["Number","99999999999999999999999999999999999999999"]]
- input: putdown
- Test 6
- input: putdown
0.0
- output: JSON
["Number","0.0"]
- input: putdown
- Test 7
- input: putdown
29835.6875940
- output: JSON
["Number","29835.6875940"]
- input: putdown
- Test 8
- input: putdown
653280458689.
- output: JSON
["Number","653280458689."]
- input: putdown
- Test 9
- input: putdown
.000006327589
- output: JSON
["Number",".000006327589"]
- input: putdown
- Test 10
- input: putdown
(- 29835.6875940)
- output: JSON
["NumberNegation",["Number","29835.6875940"]]
- input: putdown
- Test 11
- input: putdown
(- 653280458689.)
- output: JSON
["NumberNegation",["Number","653280458689."]]
- input: putdown
- Test 12
- input: putdown
(- .000006327589)
- output: JSON
["NumberNegation",["Number",".000006327589"]]
- input: putdown
can convert any size variable name to JSON
- Test 1
- input: putdown
foo
- output: JSON
null
- input: putdown
- Test 2
- input: putdown
bar
- output: JSON
null
- input: putdown
- Test 3
- input: putdown
to
- output: JSON
null
- input: putdown
can convert numeric constants from putdown to JSON
- Test 1
- input: putdown
infinity
- output: JSON
"Infinity"
- input: putdown
- Test 2
- input: putdown
pi
- output: JSON
"Pi"
- input: putdown
- Test 3
- input: putdown
eulersnumber
- output: JSON
"EulersNumber"
- input: putdown
can convert exponentiation of atomics to JSON
- Test 1
- input: putdown
(^ 1 2)
- output: JSON
["Exponentiation",["Number","1"],["Number","2"]]
- input: putdown
- Test 2
- input: putdown
(^ e x)
- output: JSON
["Exponentiation",["NumberVariable","e"],["NumberVariable","x"]]
- input: putdown
- Test 3
- input: putdown
(^ 1 infinity)
- output: JSON
["Exponentiation",["Number","1"],"Infinity"]
- input: putdown
can convert atomic percentages and factorials to JSON
- Test 1
- input: putdown
(% 10)
- output: JSON
["Percentage",["Number","10"]]
- input: putdown
- Test 2
- input: putdown
(% t)
- output: JSON
["Percentage",["NumberVariable","t"]]
- input: putdown
- Test 3
- input: putdown
(! 6)
- output: JSON
["Factorial",["Number","6"]]
- input: putdown
- Test 4
- input: putdown
(! n)
- output: JSON
["Factorial",["NumberVariable","n"]]
- input: putdown
can convert division of atomics or factors to JSON
- Test 1
- input: putdown
(/ 1 2)
- output: JSON
["Division",["Number","1"],["Number","2"]]
- input: putdown
- Test 2
- input: putdown
(/ x y)
- output: JSON
["Division",["NumberVariable","x"],["NumberVariable","y"]]
- input: putdown
- Test 3
- input: putdown
(/ 0 infinity)
- output: JSON
["Division",["Number","0"],"Infinity"]
- input: putdown
- Test 4
- input: putdown
(/ (^ x 2) 3)
- output: JSON
["Division",["Exponentiation",["NumberVariable","x"],["Number","2"]],["Number","3"]]
- input: putdown
- Test 5
- input: putdown
(/ 1 (^ e x))
- output: JSON
["Division",["Number","1"],["Exponentiation",["NumberVariable","e"],["NumberVariable","x"]]]
- input: putdown
- Test 6
- input: putdown
(/ (% 10) (^ 2 100))
- output: JSON
["Division",["Percentage",["Number","10"]],["Exponentiation",["Number","2"],["Number","100"]]]
- input: putdown
can convert multiplication of atomics or factors to JSON
- Test 1
- input: putdown
(* 1 2)
- output: JSON
["Multiplication",["Number","1"],["Number","2"]]
- input: putdown
- Test 2
- input: putdown
(* x y)
- output: JSON
["Multiplication",["NumberVariable","x"],["NumberVariable","y"]]
- input: putdown
- Test 3
- input: putdown
(* 0 infinity)
- output: JSON
["Multiplication",["Number","0"],"Infinity"]
- input: putdown
- Test 4
- input: putdown
(* (^ x 2) 3)
- output: JSON
["Multiplication",["Exponentiation",["NumberVariable","x"],["Number","2"]],["Number","3"]]
- input: putdown
- Test 5
- input: putdown
(* 1 (^ e x))
- output: JSON
["Multiplication",["Number","1"],["Exponentiation",["NumberVariable","e"],["NumberVariable","x"]]]
- input: putdown
- Test 6
- input: putdown
(* (% 10) (^ 2 100))
- output: JSON
["Multiplication",["Percentage",["Number","10"]],["Exponentiation",["Number","2"],["Number","100"]]]
- input: putdown
can convert negations of atomics or factors to JSON
- Test 1
- input: putdown
(* (- 1) 2)
- output: JSON
["Multiplication",["NumberNegation",["Number","1"]],["Number","2"]]
- input: putdown
- Test 2
- input: putdown
(* x (- y))
- output: JSON
["Multiplication",["NumberVariable","x"],["NumberNegation",["NumberVariable","y"]]]
- input: putdown
- Test 3
- input: putdown
(* (- (^ x 2)) (- 3))
- output: JSON
["Multiplication",["NumberNegation",["Exponentiation",["NumberVariable","x"],["Number","2"]]],["NumberNegation",["Number","3"]]]
- input: putdown
- Test 4
- input: putdown
(- (- (- (- 1000))))
- output: JSON
["NumberNegation",["NumberNegation",["NumberNegation",["NumberNegation",["Number","1000"]]]]]
- input: putdown
can convert additions and subtractions to JSON
- Test 1
- input: putdown
(+ x y)
- output: JSON
["Addition",["NumberVariable","x"],["NumberVariable","y"]]
- input: putdown
- Test 2
- input: putdown
(- 1 (- 3))
- output: JSON
["Subtraction",["Number","1"],["NumberNegation",["Number","3"]]]
- input: putdown
- Test 3
- input: putdown
(+ (^ A B) (- C pi))
- output: JSON
["Addition",["Exponentiation",["NumberVariable","A"],["NumberVariable","B"]],["Subtraction",["NumberVariable","C"],"Pi"]]
- input: putdown
can convert Number exprs that normally require groupers to JSON
- Test 1
- input: putdown
(- (* 1 2))
- output: JSON
["NumberNegation",["Multiplication",["Number","1"],["Number","2"]]]
- input: putdown
- Test 2
- input: putdown
(! (^ x 2))
- output: JSON
["Factorial",["Exponentiation",["NumberVariable","x"],["Number","2"]]]
- input: putdown
- Test 3
- input: putdown
(^ (- x) (* 2 (- 3)))
- output: JSON
["Exponentiation",["NumberNegation",["NumberVariable","x"]],["Multiplication",["Number","2"],["NumberNegation",["Number","3"]]]]
- input: putdown
- Test 4
- input: putdown
(^ (- 3) (+ 1 2))
- output: JSON
["Exponentiation",["NumberNegation",["Number","3"]],["Addition",["Number","1"],["Number","2"]]]
- input: putdown
can convert relations of numeric expressions to JSON
- Test 1
- input: putdown
(> 1 2)
- output: JSON
["GreaterThan",["Number","1"],["Number","2"]]
- input: putdown
- Test 2
- input: putdown
(< (- 1 2) (+ 1 2))
- output: JSON
["LessThan",["Subtraction",["Number","1"],["Number","2"]],["Addition",["Number","1"],["Number","2"]]]
- input: putdown
- Test 3
- input: putdown
(not (= 1 2))
- output: JSON
["LogicalNegation",["Equals",["Number","1"],["Number","2"]]]
- input: putdown
- Test 4
- input: putdown
(and (>= 2 1) (<= 2 3))
- output: JSON
["Conjunction",["GreaterThanOrEqual",["Number","2"],["Number","1"]],["LessThanOrEqual",["Number","2"],["Number","3"]]]
- input: putdown
- Test 5
- input: putdown
(relationholds | 7 14)
- output: JSON
["BinaryRelationHolds","Divides",["Number","7"],["Number","14"]]
- input: putdown
- Test 6
- input: putdown
(relationholds | (apply A k) (! n))
- output: JSON
["BinaryRelationHolds","Divides",["NumberFunctionApplication",["FunctionVariable","A"],["NumberVariable","k"]],["Factorial",["NumberVariable","n"]]]
- input: putdown
- Test 7
- input: putdown
(relationholds ~ (- 1 k) (+ 1 k))
- output: JSON
["BinaryRelationHolds","GenericBinaryRelation",["Subtraction",["Number","1"],["NumberVariable","k"]],["Addition",["Number","1"],["NumberVariable","k"]]]
- input: putdown
- Test 8
- input: putdown
(relationholds ~~ 0.99 1.01)
- output: JSON
["BinaryRelationHolds","ApproximatelyEqual",["Number","0.99"],["Number","1.01"]]
- input: putdown
can convert propositional logic atomics to JSON
- Test 1
- input: putdown
true
- output: JSON
"LogicalTrue"
- input: putdown
- Test 2
- input: putdown
false
- output: JSON
"LogicalFalse"
- input: putdown
- Test 3
- input: putdown
contradiction
- output: JSON
"Contradiction"
- input: putdown
can convert propositional logic conjuncts to JSON
- Test 1
- input: putdown
(and true false)
- output: JSON
["Conjunction","LogicalTrue","LogicalFalse"]
- input: putdown
- Test 2
- input: putdown
(and (not P) (not true))
- output: JSON
["Conjunction",["LogicalNegation",["LogicVariable","P"]],["LogicalNegation","LogicalTrue"]]
- input: putdown
- Test 3
- input: putdown
(and (and a b) c)
- output: JSON
["Conjunction",["Conjunction",["LogicVariable","a"],["LogicVariable","b"]],["LogicVariable","c"]]
- input: putdown
can convert propositional logic disjuncts to JSON
- Test 1
- input: putdown
(or true (not A))
- output: JSON
["Disjunction","LogicalTrue",["LogicalNegation",["LogicVariable","A"]]]
- input: putdown
- Test 2
- input: putdown
(or (and P Q) (and Q P))
- output: JSON
["Disjunction",["Conjunction",["LogicVariable","P"],["LogicVariable","Q"]],["Conjunction",["LogicVariable","Q"],["LogicVariable","P"]]]
- input: putdown
can convert propositional logic conditionals to JSON
- Test 1
- input: putdown
(implies A (and Q (not P)))
- output: JSON
["Implication",["LogicVariable","A"],["Conjunction",["LogicVariable","Q"],["LogicalNegation",["LogicVariable","P"]]]]
- input: putdown
- Test 2
- input: putdown
(implies (implies (or P Q) (and Q P)) T)
- output: JSON
["Implication",["Implication",["Disjunction",["LogicVariable","P"],["LogicVariable","Q"]],["Conjunction",["LogicVariable","Q"],["LogicVariable","P"]]],["LogicVariable","T"]]
- input: putdown
can convert propositional logic biconditionals to JSON
- Test 1
- input: putdown
(iff A (and Q (not P)))
- output: JSON
["LogicalEquivalence",["LogicVariable","A"],["Conjunction",["LogicVariable","Q"],["LogicalNegation",["LogicVariable","P"]]]]
- input: putdown
- Test 2
- input: putdown
(implies (iff (or P Q) (and Q P)) T)
- output: JSON
["Implication",["LogicalEquivalence",["Disjunction",["LogicVariable","P"],["LogicVariable","Q"]],["Conjunction",["LogicVariable","Q"],["LogicVariable","P"]]],["LogicVariable","T"]]
- input: putdown
can convert propositional expressions with groupers to JSON
- Test 1
- input: putdown
(or P (and (iff Q Q) P))
- output: JSON
["Disjunction",["LogicVariable","P"],["Conjunction",["LogicalEquivalence",["LogicVariable","Q"],["LogicVariable","Q"]],["LogicVariable","P"]]]
- input: putdown
- Test 2
- input: putdown
(not (iff true false))
- output: JSON
["LogicalNegation",["LogicalEquivalence","LogicalTrue","LogicalFalse"]]
- input: putdown
can convert simple predicate logic expressions to JSON
- Test 1
- input: putdown
(forall (x , P))
- output: JSON
["UniversalQuantifier",["NumberVariable","x"],["LogicVariable","P"]]
- input: putdown
- Test 2
- input: putdown
(exists (t , (not Q)))
- output: JSON
["ExistentialQuantifier",["NumberVariable","t"],["LogicalNegation",["LogicVariable","Q"]]]
- input: putdown
- Test 3
- input: putdown
(exists! (k , (implies m n)))
- output: JSON
["UniqueExistentialQuantifier",["NumberVariable","k"],["Implication",["LogicVariable","m"],["LogicVariable","n"]]]
- input: putdown
can convert finite and empty sets to JSON
- Test 1
- input: putdown
emptyset
- output: JSON
"EmptySet"
- input: putdown
- Test 2
- input: putdown
(finiteset (elts 1))
- output: JSON
["FiniteSet",["OneElementSequence",["Number","1"]]]
- input: putdown
- Test 3
- input: putdown
(finiteset (elts 1 (elts 2)))
- output: JSON
["FiniteSet",["ElementThenSequence",["Number","1"],["OneElementSequence",["Number","2"]]]]
- input: putdown
- Test 4
- input: putdown
(finiteset (elts 1 (elts 2 (elts 3))))
- output: JSON
["FiniteSet",["ElementThenSequence",["Number","1"],["ElementThenSequence",["Number","2"],["OneElementSequence",["Number","3"]]]]]
- input: putdown
- Test 5
- input: putdown
(finiteset (elts emptyset (elts emptyset)))
- output: JSON
["FiniteSet",["ElementThenSequence","EmptySet",["OneElementSequence","EmptySet"]]]
- input: putdown
- Test 6
- input: putdown
(finiteset (elts (finiteset (elts emptyset))))
- output: JSON
["FiniteSet",["OneElementSequence",["FiniteSet",["OneElementSequence","EmptySet"]]]]
- input: putdown
- Test 7
- input: putdown
(finiteset (elts 3 (elts x)))
- output: JSON
["FiniteSet",["ElementThenSequence",["Number","3"],["OneElementSequence",["NumberVariable","x"]]]]
- input: putdown
- Test 8
- input: putdown
(finiteset (elts (union A B) (elts (intersection A B))))
- output: JSON
["FiniteSet",["ElementThenSequence",["SetUnion",["SetVariable","A"],["SetVariable","B"]],["OneElementSequence",["SetIntersection",["SetVariable","A"],["SetVariable","B"]]]]]
- input: putdown
- Test 9
- input: putdown
(finiteset (elts 1 (elts 2 (elts emptyset (elts K (elts P))))))
- output: JSON
["FiniteSet",["ElementThenSequence",["Number","1"],["ElementThenSequence",["Number","2"],["ElementThenSequence","EmptySet",["ElementThenSequence",["NumberVariable","K"],["OneElementSequence",["NumberVariable","P"]]]]]]]
- input: putdown
can convert tuples and vectors to JSON
- Test 1
- input: putdown
(tuple (elts 5 (elts 6)))
- output: JSON
["Tuple",["ElementThenSequence",["Number","5"],["OneElementSequence",["Number","6"]]]]
- input: putdown
- Test 2
- input: putdown
(tuple (elts 5 (elts (union A B) (elts k))))
- output: JSON
["Tuple",["ElementThenSequence",["Number","5"],["ElementThenSequence",["SetUnion",["SetVariable","A"],["SetVariable","B"]],["OneElementSequence",["NumberVariable","k"]]]]]
- input: putdown
- Test 3
- input: putdown
(vector (elts 5 (elts 6)))
- output: JSON
["Vector",["NumberThenSequence",["Number","5"],["OneNumberSequence",["Number","6"]]]]
- input: putdown
- Test 4
- input: putdown
(vector (elts 5 (elts (- 7) (elts k))))
- output: JSON
["Vector",["NumberThenSequence",["Number","5"],["NumberThenSequence",["NumberNegation",["Number","7"]],["OneNumberSequence",["NumberVariable","k"]]]]]
- input: putdown
- Test 5
- input: putdown
(tuple)
- output: JSON
null
- input: putdown
- Test 6
- input: putdown
(tuple (elts))
- output: JSON
null
- input: putdown
- Test 7
- input: putdown
(tuple (elts 3))
- output: JSON
null
- input: putdown
- Test 8
- input: putdown
(vector)
- output: JSON
null
- input: putdown
- Test 9
- input: putdown
(vector (elts))
- output: JSON
null
- input: putdown
- Test 10
- input: putdown
(vector (elts 3))
- output: JSON
null
- input: putdown
- Test 11
- input: putdown
(tuple (elts (tuple (elts 1 (elts 2))) (elts 6)))
- output: JSON
["Tuple",["ElementThenSequence",["Tuple",["ElementThenSequence",["Number","1"],["OneElementSequence",["Number","2"]]]],["OneElementSequence",["Number","6"]]]]
- input: putdown
- Test 12
- input: putdown
(vector (elts (tuple (elts 1 (elts 2))) (elts 6)))
- output: JSON
null
- input: putdown
- Test 13
- input: putdown
(vector (elts (vector (elts 1 (elts 2))) (elts 6)))
- output: JSON
null
- input: putdown
- Test 14
- input: putdown
(vector (elts (union A B) (elts 6)))
- output: JSON
null
- input: putdown
can convert simple set memberships and subsets to JSON
- Test 1
- input: putdown
(in b B)
- output: JSON
["NounIsElement",["NumberVariable","b"],["SetVariable","B"]]
- input: putdown
- Test 2
- input: putdown
(in 2 (finiteset (elts 1 (elts 2))))
- output: JSON
["NounIsElement",["Number","2"],["FiniteSet",["ElementThenSequence",["Number","1"],["OneElementSequence",["Number","2"]]]]]
- input: putdown
- Test 3
- input: putdown
(in X (union a b))
- output: JSON
["NounIsElement",["NumberVariable","X"],["SetUnion",["SetVariable","a"],["SetVariable","b"]]]
- input: putdown
- Test 4
- input: putdown
(in (union A B) (union X Y))
- output: JSON
["NounIsElement",["SetUnion",["SetVariable","A"],["SetVariable","B"]],["SetUnion",["SetVariable","X"],["SetVariable","Y"]]]
- input: putdown
- Test 5
- input: putdown
(subset A (complement B))
- output: JSON
["Subset",["SetVariable","A"],["SetComplement",["SetVariable","B"]]]
- input: putdown
- Test 6
- input: putdown
(subseteq (intersection u v) (union u v))
- output: JSON
["SubsetOrEqual",["SetIntersection",["SetVariable","u"],["SetVariable","v"]],["SetUnion",["SetVariable","u"],["SetVariable","v"]]]
- input: putdown
- Test 7
- input: putdown
(subseteq (finiteset (elts 1)) (union (finiteset (elts 1)) (finiteset (elts 2))))
- output: JSON
["SubsetOrEqual",["FiniteSet",["OneElementSequence",["Number","1"]]],["SetUnion",["FiniteSet",["OneElementSequence",["Number","1"]]],["FiniteSet",["OneElementSequence",["Number","2"]]]]]
- input: putdown
- Test 8
- input: putdown
(in p (cartesianproduct U V))
- output: JSON
["NounIsElement",["NumberVariable","p"],["SetCartesianProduct",["SetVariable","U"],["SetVariable","V"]]]
- input: putdown
- Test 9
- input: putdown
(in q (union (complement U) (cartesianproduct V W)))
- output: JSON
["NounIsElement",["NumberVariable","q"],["SetUnion",["SetComplement",["SetVariable","U"]],["SetCartesianProduct",["SetVariable","V"],["SetVariable","W"]]]]
- input: putdown
- Test 10
- input: putdown
(in (tuple (elts a (elts b))) (cartesianproduct A B))
- output: JSON
["NounIsElement",["Tuple",["ElementThenSequence",["NumberVariable","a"],["OneElementSequence",["NumberVariable","b"]]]],["SetCartesianProduct",["SetVariable","A"],["SetVariable","B"]]]
- input: putdown
- Test 11
- input: putdown
(in (vector (elts a (elts b))) (cartesianproduct A B))
- output: JSON
["NounIsElement",["Vector",["NumberThenSequence",["NumberVariable","a"],["OneNumberSequence",["NumberVariable","b"]]]],["SetCartesianProduct",["SetVariable","A"],["SetVariable","B"]]]
- input: putdown
does not undo the canonical form for "notin" notation
- Test 1
- input: putdown
(not (in a A))
- output: JSON
["LogicalNegation",["NounIsElement",["NumberVariable","a"],["SetVariable","A"]]]
- input: putdown
- Test 2
- input: putdown
(not (in emptyset emptyset))
- output: JSON
["LogicalNegation",["NounIsElement","EmptySet","EmptySet"]]
- input: putdown
- Test 3
- input: putdown
(not (in (- 3 5) (intersection K P)))
- output: JSON
["LogicalNegation",["NounIsElement",["Subtraction",["Number","3"],["Number","5"]],["SetIntersection",["SetVariable","K"],["SetVariable","P"]]]]
- input: putdown
can parse to JSON sentences built from various relations
- Test 1
- input: putdown
(or P (in b B))
- output: JSON
["Disjunction",["LogicVariable","P"],["NounIsElement",["NumberVariable","b"],["SetVariable","B"]]]
- input: putdown
- Test 2
- input: putdown
(forall (x , (in x X)))
- output: JSON
["UniversalQuantifier",["NumberVariable","x"],["NounIsElement",["NumberVariable","x"],["SetVariable","X"]]]
- input: putdown
- Test 3
- input: putdown
(and (subseteq A B) (subseteq B A))
- output: JSON
["Conjunction",["SubsetOrEqual",["SetVariable","A"],["SetVariable","B"]],["SubsetOrEqual",["SetVariable","B"],["SetVariable","A"]]]
- input: putdown
- Test 4
- input: putdown
(= R (cartesianproduct A B))
- output: JSON
["Equals",["NumberVariable","R"],["SetCartesianProduct",["SetVariable","A"],["SetVariable","B"]]]
- input: putdown
- Test 5
- input: putdown
(forall (n , (relationholds | n (! n))))
- output: JSON
["UniversalQuantifier",["NumberVariable","n"],["BinaryRelationHolds","Divides",["NumberVariable","n"],["Factorial",["NumberVariable","n"]]]]
- input: putdown
- Test 6
- input: putdown
(implies (relationholds ~ a b) (relationholds ~ b a))
- output: JSON
["Implication",["BinaryRelationHolds","GenericBinaryRelation",["NumberVariable","a"],["NumberVariable","b"]],["BinaryRelationHolds","GenericBinaryRelation",["NumberVariable","b"],["NumberVariable","a"]]]
- input: putdown
can parse notation related to functions
- Test 1
- input: putdown
(function f A B)
- output: JSON
["FunctionSignature",["FunctionVariable","f"],["SetVariable","A"],["SetVariable","B"]]
- input: putdown
- Test 2
- input: putdown
(not (function F (union X Y) Z))
- output: JSON
["LogicalNegation",["FunctionSignature",["FunctionVariable","F"],["SetUnion",["SetVariable","X"],["SetVariable","Y"]],["SetVariable","Z"]]]
- input: putdown
- Test 3
- input: putdown
(function (compose f g) A C)
- output: JSON
["FunctionSignature",["FunctionComposition",["FunctionVariable","f"],["FunctionVariable","g"]],["SetVariable","A"],["SetVariable","C"]]
- input: putdown
- Test 4
- input: putdown
(apply f x)
- output: JSON
["NumberFunctionApplication",["FunctionVariable","f"],["NumberVariable","x"]]
- input: putdown
- Test 5
- input: putdown
(apply (inverse f) (apply (inverse g) 10))
- output: JSON
["NumberFunctionApplication",["FunctionInverse",["FunctionVariable","f"]],["NumberFunctionApplication",["FunctionInverse",["FunctionVariable","g"]],["Number","10"]]]
- input: putdown
- Test 6
- input: putdown
(apply E (complement L))
- output: JSON
["NumberFunctionApplication",["FunctionVariable","E"],["SetComplement",["SetVariable","L"]]]
- input: putdown
- Test 7
- input: putdown
(intersection emptyset (apply f 2))
- output: JSON
["SetIntersection","EmptySet",["SetFunctionApplication",["FunctionVariable","f"],["Number","2"]]]
- input: putdown
- Test 8
- input: putdown
(and (apply P e) (apply Q (+ 3 b)))
- output: JSON
["Conjunction",["PropositionFunctionApplication",["FunctionVariable","P"],["NumberVariable","e"]],["PropositionFunctionApplication",["FunctionVariable","Q"],["Addition",["Number","3"],["NumberVariable","b"]]]]
- input: putdown
- Test 9
- input: putdown
(= (apply f x) 3)
- output: JSON
["Equals",["NumberFunctionApplication",["FunctionVariable","f"],["NumberVariable","x"]],["Number","3"]]
- input: putdown
- Test 10
- input: putdown
(= F (compose G (inverse H)))
- output: JSON
["EqualFunctions",["FunctionVariable","F"],["FunctionComposition",["FunctionVariable","G"],["FunctionInverse",["FunctionVariable","H"]]]]
- input: putdown
can parse trigonometric functions correctly
- Test 1
- input: putdown
(apply sin x)
- output: JSON
["PrefixFunctionApplication","SineFunction",["NumberVariable","x"]]
- input: putdown
- Test 2
- input: putdown
(apply cos (* pi x))
- output: JSON
["PrefixFunctionApplication","CosineFunction",["Multiplication","Pi",["NumberVariable","x"]]]
- input: putdown
- Test 3
- input: putdown
(apply tan t)
- output: JSON
["PrefixFunctionApplication","TangentFunction",["NumberVariable","t"]]
- input: putdown
- Test 4
- input: putdown
(/ 1 (apply cot pi))
- output: JSON
["Division",["Number","1"],["PrefixFunctionApplication","CotangentFunction","Pi"]]
- input: putdown
- Test 5
- input: putdown
(= (apply sec y) (apply csc y))
- output: JSON
["Equals",["PrefixFunctionApplication","SecantFunction",["NumberVariable","y"]],["PrefixFunctionApplication","CosecantFunction",["NumberVariable","y"]]]
- input: putdown
can parse logarithms correctly
- Test 1
- input: putdown
(apply log n)
- output: JSON
["PrefixFunctionApplication","Logarithm",["NumberVariable","n"]]
- input: putdown
- Test 2
- input: putdown
(+ 1 (apply ln x))
- output: JSON
["Addition",["Number","1"],["PrefixFunctionApplication","NaturalLogarithm",["NumberVariable","x"]]]
- input: putdown
- Test 3
- input: putdown
(apply (logbase 2) 1024)
- output: JSON
["PrefixFunctionApplication",["LogarithmWithBase",["Number","2"]],["Number","1024"]]
- input: putdown
- Test 4
- input: putdown
(/ (apply log n) (apply log (apply log n)))
- output: JSON
["Division",["PrefixFunctionApplication","Logarithm",["NumberVariable","n"]],["PrefixFunctionApplication","Logarithm",["PrefixFunctionApplication","Logarithm",["NumberVariable","n"]]]]
- input: putdown
can parse equivalence classes and treat them as sets
- Test 1
- input: putdown
(equivclass 1 ~~)
- output: JSON
["EquivalenceClass",["Number","1"],"ApproximatelyEqual"]
- input: putdown
- Test 2
- input: putdown
(union (equivclass 1 ~~) (equivclass 2 ~~))
- output: JSON
["SetUnion",["EquivalenceClass",["Number","1"],"ApproximatelyEqual"],["EquivalenceClass",["Number","2"],"ApproximatelyEqual"]]
- input: putdown
can parse equivalence and classes mod a Number
- Test 1
- input: putdown
(=mod 5 11 3)
- output: JSON
["EquivalentModulo",["Number","5"],["Number","11"],["Number","3"]]
- input: putdown
- Test 2
- input: putdown
(=mod k m n)
- output: JSON
["EquivalentModulo",["NumberVariable","k"],["NumberVariable","m"],["NumberVariable","n"]]
- input: putdown
- Test 3
- input: putdown
(subset emptyset (modclass (- 1) 10))
- output: JSON
["Subset","EmptySet",["EquivalenceClassModulo",["NumberNegation",["Number","1"]],["Number","10"]]]
- input: putdown
can parse type sentences and combinations of them
- Test 1
- input: putdown
(hastype x settype)
- output: JSON
["HasType",["NumberVariable","x"],"SetType"]
- input: putdown
- Test 2
- input: putdown
(hastype n numbertype)
- output: JSON
["HasType",["NumberVariable","n"],"NumberType"]
- input: putdown
- Test 3
- input: putdown
(hastype S partialordertype)
- output: JSON
["HasType",["NumberVariable","S"],"PartialOrderType"]
- input: putdown
- Test 4
- input: putdown
(and (hastype 1 numbertype) (hastype 10 numbertype))
- output: JSON
["Conjunction",["HasType",["Number","1"],"NumberType"],["HasType",["Number","10"],"NumberType"]]
- input: putdown
- Test 5
- input: putdown
(implies (hastype R equivalencerelationtype) (hastype R relationtype))
- output: JSON
["Implication",["HasType",["NumberVariable","R"],"EquivalenceRelationType"],["HasType",["NumberVariable","R"],"RelationType"]]
- input: putdown
can parse notation for expression function application
- Test 1
- input: putdown
(efa f x)
- output: JSON
["NumberEFA",["FunctionVariable","f"],["NumberVariable","x"]]
- input: putdown
- Test 2
- input: putdown
(apply F (efa k 10))
- output: JSON
["NumberFunctionApplication",["FunctionVariable","F"],["NumberEFA",["FunctionVariable","k"],["Number","10"]]]
- input: putdown
- Test 3
- input: putdown
(efa E (complement L))
- output: JSON
["NumberEFA",["FunctionVariable","E"],["SetComplement",["SetVariable","L"]]]
- input: putdown
- Test 4
- input: putdown
(intersection emptyset (efa f 2))
- output: JSON
["SetIntersection","EmptySet",["SetEFA",["FunctionVariable","f"],["Number","2"]]]
- input: putdown
- Test 5
- input: putdown
(and (efa P x) (efa Q y))
- output: JSON
["Conjunction",["PropositionEFA",["FunctionVariable","P"],["NumberVariable","x"]],["PropositionEFA",["FunctionVariable","Q"],["NumberVariable","y"]]]
- input: putdown
can parse notation for assumptions
- Test 1
- input: putdown
:X
- output: JSON
["Given_Variant1",["LogicVariable","X"]]
- input: putdown
- Test 2
- input: putdown
:(= k 1000)
- output: JSON
["Given_Variant1",["Equals",["NumberVariable","k"],["Number","1000"]]]
- input: putdown
- Test 3
- input: putdown
:true
- output: JSON
["Given_Variant1","LogicalTrue"]
- input: putdown
- Test 4
- input: putdown
:50
- output: JSON
null
- input: putdown
- Test 5
- input: putdown
:(tuple (elts 5 (elts 6)))
- output: JSON
null
- input: putdown
- Test 6
- input: putdown
:(compose f g)
- output: JSON
null
- input: putdown
- Test 7
- input: putdown
:emptyset
- output: JSON
null
- input: putdown
- Test 8
- input: putdown
:infinity
- output: JSON
null
- input: putdown
can parse notation for Let-style declarations
- Test 1
- input: putdown
:[x]
- output: JSON
["Let_Variant1",["NumberVariable","x"]]
- input: putdown
- Test 2
- input: putdown
:[T]
- output: JSON
["Let_Variant1",["NumberVariable","T"]]
- input: putdown
- Test 3
- input: putdown
:[x , (> x 0)]
- output: JSON
["LetBeSuchThat_Variant1",["NumberVariable","x"],["GreaterThan",["NumberVariable","x"],["Number","0"]]]
- input: putdown
- Test 4
- input: putdown
:[T , (or (= T 5) (in T S))]
- output: JSON
["LetBeSuchThat_Variant1",["NumberVariable","T"],["Disjunction",["Equals",["NumberVariable","T"],["Number","5"]],["NounIsElement",["NumberVariable","T"],["SetVariable","S"]]]]
- input: putdown
- Test 5
- input: putdown
:[(> x 5)]
- output: JSON
null
- input: putdown
- Test 6
- input: putdown
:[(= 1 1)]
- output: JSON
null
- input: putdown
- Test 7
- input: putdown
:[emptyset]
- output: JSON
null
- input: putdown
- Test 8
- input: putdown
:[x , 1]
- output: JSON
null
- input: putdown
- Test 9
- input: putdown
:[x , (or 1 2)]
- output: JSON
null
- input: putdown
- Test 10
- input: putdown
:[x , [y]]
- output: JSON
null
- input: putdown
- Test 11
- input: putdown
:[x , :B]
- output: JSON
null
- input: putdown
can parse notation for For Some-style declarations
- Test 1
- input: putdown
[x , (> x 0)]
- output: JSON
["ForSome_Variant1",["NumberVariable","x"],["GreaterThan",["NumberVariable","x"],["Number","0"]]]
- input: putdown
- Test 2
- input: putdown
[T , (or (= T 5) (in T S))]
- output: JSON
["ForSome_Variant1",["NumberVariable","T"],["Disjunction",["Equals",["NumberVariable","T"],["Number","5"]],["NounIsElement",["NumberVariable","T"],["SetVariable","S"]]]]
- input: putdown
- Test 3
- input: putdown
[x]
- output: JSON
null
- input: putdown
- Test 4
- input: putdown
[T]
- output: JSON
null
- input: putdown
- Test 5
- input: putdown
[(> x 5)]
- output: JSON
null
- input: putdown
- Test 6
- input: putdown
[(= 1 1)]
- output: JSON
null
- input: putdown
- Test 7
- input: putdown
[emptyset]
- output: JSON
null
- input: putdown
- Test 8
- input: putdown
[x , 1]
- output: JSON
null
- input: putdown
- Test 9
- input: putdown
[x , (or 1 2)]
- output: JSON
null
- input: putdown
- Test 10
- input: putdown
[x , [y]]
- output: JSON
null
- input: putdown
- Test 11
- input: putdown
[x , :B]
- output: JSON
null
- input: putdown
Rendering JSON into putdown
can convert JSON numbers to putdown
- Test 1
- input: JSON
["Number","0"]
- output: putdown
0
- input: JSON
- Test 2
- input: JSON
["Number","453789"]
- output: putdown
453789
- input: JSON
- Test 3
- input: JSON
["Number","99999999999999999999999999999999999999999"]
- output: putdown
99999999999999999999999999999999999999999
- input: JSON
- Test 4
- input: JSON
["NumberNegation",["Number","453789"]]
- output: putdown
(- 453789)
- input: JSON
- Test 5
- input: JSON
["NumberNegation",["Number","99999999999999999999999999999999999999999"]]
- output: putdown
(- 99999999999999999999999999999999999999999)
- input: JSON
- Test 6
- input: JSON
["Number","0.0"]
- output: putdown
0.0
- input: JSON
- Test 7
- input: JSON
["Number","29835.6875940"]
- output: putdown
29835.6875940
- input: JSON
- Test 8
- input: JSON
["Number","653280458689."]
- output: putdown
653280458689.
- input: JSON
- Test 9
- input: JSON
["Number",".000006327589"]
- output: putdown
.000006327589
- input: JSON
- Test 10
- input: JSON
["NumberNegation",["Number","29835.6875940"]]
- output: putdown
(- 29835.6875940)
- input: JSON
- Test 11
- input: JSON
["NumberNegation",["Number","653280458689."]]
- output: putdown
(- 653280458689.)
- input: JSON
- Test 12
- input: JSON
["NumberNegation",["Number",".000006327589"]]
- output: putdown
(- .000006327589)
- input: JSON
can convert any size variable name from JSON to putdown
- Test 1
- input: JSON
["NumberVariable","x"]
- output: putdown
x
- input: JSON
- Test 2
- input: JSON
["NumberVariable","E"]
- output: putdown
E
- input: JSON
- Test 3
- input: JSON
["NumberVariable","q"]
- output: putdown
q
- input: JSON
- Test 4
- input: JSON
["NumberVariable","foo"]
- output: putdown
foo
- input: JSON
- Test 5
- input: JSON
["NumberVariable","bar"]
- output: putdown
bar
- input: JSON
- Test 6
- input: JSON
["NumberVariable","to"]
- output: putdown
to
- input: JSON
can convert numeric constants from JSON to putdown
- Test 1
- input: JSON
"Infinity"
- output: putdown
infinity
- input: JSON
- Test 2
- input: JSON
"Pi"
- output: putdown
pi
- input: JSON
- Test 3
- input: JSON
"EulersNumber"
- output: putdown
eulersnumber
- input: JSON
can convert exponentiation of atomics to putdown
- Test 1
- input: JSON
["Exponentiation",["Number","1"],["Number","2"]]
- output: putdown
(^ 1 2)
- input: JSON
- Test 2
- input: JSON
["Exponentiation",["NumberVariable","e"],["NumberVariable","x"]]
- output: putdown
(^ e x)
- input: JSON
- Test 3
- input: JSON
["Exponentiation",["Number","1"],"Infinity"]
- output: putdown
(^ 1 infinity)
- input: JSON
can convert atomic percentages and factorials to putdown
- Test 1
- input: JSON
["Percentage",["Number","10"]]
- output: putdown
(% 10)
- input: JSON
- Test 2
- input: JSON
["Percentage",["NumberVariable","t"]]
- output: putdown
(% t)
- input: JSON
- Test 3
- input: JSON
["Factorial",["Number","100"]]
- output: putdown
(! 100)
- input: JSON
- Test 4
- input: JSON
["Factorial",["NumberVariable","J"]]
- output: putdown
(! J)
- input: JSON
can convert division of atomics or factors to putdown
- Test 1
- input: JSON
["Division",["Number","1"],["Number","2"]]
- output: putdown
(/ 1 2)
- input: JSON
- Test 2
- input: JSON
["Division",["NumberVariable","x"],["NumberVariable","y"]]
- output: putdown
(/ x y)
- input: JSON
- Test 3
- input: JSON
["Division",["Number","0"],"Infinity"]
- output: putdown
(/ 0 infinity)
- input: JSON
- Test 4
- input: JSON
["Division",["Exponentiation",["NumberVariable","x"],["Number","2"]],["Number","3"]]
- output: putdown
(/ (^ x 2) 3)
- input: JSON
- Test 5
- input: JSON
["Division",["Number","1"],["Exponentiation",["NumberVariable","e"],["NumberVariable","x"]]]
- output: putdown
(/ 1 (^ e x))
- input: JSON
- Test 6
- input: JSON
["Division",["Percentage",["Number","10"]],["Exponentiation",["Number","2"],["Number","100"]]]
- output: putdown
(/ (% 10) (^ 2 100))
- input: JSON
can convert multiplication of atomics or factors to putdown
- Test 1
- input: JSON
["Multiplication",["Number","1"],["Number","2"]]
- output: putdown
(* 1 2)
- input: JSON
- Test 2
- input: JSON
["Multiplication",["NumberVariable","x"],["NumberVariable","y"]]
- output: putdown
(* x y)
- input: JSON
- Test 3
- input: JSON
["Multiplication",["Number","0"],"Infinity"]
- output: putdown
(* 0 infinity)
- input: JSON
- Test 4
- input: JSON
["Multiplication",["Exponentiation",["NumberVariable","x"],["Number","2"]],["Number","3"]]
- output: putdown
(* (^ x 2) 3)
- input: JSON
- Test 5
- input: JSON
["Multiplication",["Number","1"],["Exponentiation",["NumberVariable","e"],["NumberVariable","x"]]]
- output: putdown
(* 1 (^ e x))
- input: JSON
- Test 6
- input: JSON
["Multiplication",["Percentage",["Number","10"]],["Exponentiation",["Number","2"],["Number","100"]]]
- output: putdown
(* (% 10) (^ 2 100))
- input: JSON
can convert negations of atomics or factors to putdown
- Test 1
- input: JSON
["Multiplication",["NumberNegation",["Number","1"]],["Number","2"]]
- output: putdown
(* (- 1) 2)
- input: JSON
- Test 2
- input: JSON
["Multiplication",["NumberVariable","x"],["NumberNegation",["NumberVariable","y"]]]
- output: putdown
(* x (- y))
- input: JSON
- Test 3
- input: JSON
["Multiplication",["NumberNegation",["Exponentiation",["NumberVariable","x"],["Number","2"]]],["NumberNegation",["Number","3"]]]
- output: putdown
(* (- (^ x 2)) (- 3))
- input: JSON
- Test 4
- input: JSON
["NumberNegation",["NumberNegation",["NumberNegation",["NumberNegation",["Number","1000"]]]]]
- output: putdown
(- (- (- (- 1000))))
- input: JSON
can convert additions and subtractions to putdown
- Test 1
- input: JSON
["Addition",["NumberVariable","x"],["NumberVariable","y"]]
- output: putdown
(+ x y)
- input: JSON
- Test 2
- input: JSON
["Subtraction",["Number","1"],["NumberNegation",["Number","3"]]]
- output: putdown
(- 1 (- 3))
- input: JSON
- Test 3
- input: JSON
["Addition",["Exponentiation",["NumberVariable","A"],["NumberVariable","B"]],["Subtraction",["NumberVariable","C"],"Pi"]]
- output: putdown
(+ (^ A B) (- C pi))
- input: JSON
can convert number expressions with groupers to putdown
- Test 1
- input: JSON
["NumberNegation",["Multiplication",["Number","1"],["Number","2"]]]
- output: putdown
(- (* 1 2))
- input: JSON
- Test 2
- input: JSON
["Factorial",["Exponentiation",["NumberVariable","x"],["Number","2"]]]
- output: putdown
(! (^ x 2))
- input: JSON
- Test 3
- input: JSON
["Exponentiation",["NumberNegation",["NumberVariable","x"]],["Multiplication",["Number","2"],["NumberNegation",["Number","3"]]]]
- output: putdown
(^ (- x) (* 2 (- 3)))
- input: JSON
- Test 4
- input: JSON
["Exponentiation",["NumberNegation",["Number","3"]],["Addition",["Number","1"],["Number","2"]]]
- output: putdown
(^ (- 3) (+ 1 2))
- input: JSON
can convert relations of numeric expressions to putdown
- Test 1
- input: JSON
["GreaterThan",["Number","1"],["Number","2"]]
- output: putdown
(> 1 2)
- input: JSON
- Test 2
- input: JSON
["LessThan",["Subtraction",["Number","1"],["Number","2"]],["Addition",["Number","1"],["Number","2"]]]
- output: putdown
(< (- 1 2) (+ 1 2))
- input: JSON
- Test 3
- input: JSON
["LogicalNegation",["Equals",["Number","1"],["Number","2"]]]
- output: putdown
(not (= 1 2))
- input: JSON
- Test 4
- input: JSON
["Conjunction",["GreaterThanOrEqual",["Number","2"],["Number","1"]],["LessThanOrEqual",["Number","2"],["Number","3"]]]
- output: putdown
(and (>= 2 1) (<= 2 3))
- input: JSON
- Test 5
- input: JSON
["BinaryRelationHolds","Divides",["Number","7"],["Number","14"]]
- output: putdown
(relationholds | 7 14)
- input: JSON
- Test 6
- input: JSON
["BinaryRelationHolds","Divides",["NumberFunctionApplication",["FunctionVariable","A"],["NumberVariable","k"]],["Factorial",["NumberVariable","n"]]]
- output: putdown
(relationholds | (apply A k) (! n))
- input: JSON
- Test 7
- input: JSON
["BinaryRelationHolds","GenericBinaryRelation",["Subtraction",["Number","1"],["NumberVariable","k"]],["Addition",["Number","1"],["NumberVariable","k"]]]
- output: putdown
(relationholds ~ (- 1 k) (+ 1 k))
- input: JSON
- Test 8
- input: JSON
["BinaryRelationHolds","ApproximatelyEqual",["Number","0.99"],["Number","1.01"]]
- output: putdown
(relationholds ~~ 0.99 1.01)
- input: JSON
creates the canonical form for inequality
- Test 1
- input: JSON
["NotEqual",["FunctionVariable","f"],["FunctionVariable","g"]]
- output: putdown
(not (= f g))
- input: JSON
can convert propositional logic atomics to putdown
- Test 1
- input: JSON
"LogicalTrue"
- output: putdown
true
- input: JSON
- Test 2
- input: JSON
"LogicalFalse"
- output: putdown
false
- input: JSON
- Test 3
- input: JSON
"Contradiction"
- output: putdown
contradiction
- input: JSON
- Test 4
- input: JSON
["LogicVariable","P"]
- output: putdown
P
- input: JSON
- Test 5
- input: JSON
["LogicVariable","a"]
- output: putdown
a
- input: JSON
- Test 6
- input: JSON
["LogicVariable","somethingLarge"]
- output: putdown
somethingLarge
- input: JSON
can convert propositional logic conjuncts to putdown
- Test 1
- input: JSON
["Conjunction","LogicalTrue","LogicalFalse"]
- output: putdown
(and true false)
- input: JSON
- Test 2
- input: JSON
["Conjunction",["LogicalNegation",["LogicVariable","P"]],["LogicalNegation","LogicalTrue"]]
- output: putdown
(and (not P) (not true))
- input: JSON
- Test 3
- input: JSON
["Conjunction",["Conjunction",["LogicVariable","a"],["LogicVariable","b"]],["LogicVariable","c"]]
- output: putdown
(and (and a b) c)
- input: JSON
can convert propositional logic disjuncts to putdown
- Test 1
- input: JSON
["Disjunction","LogicalTrue",["LogicalNegation",["LogicVariable","A"]]]
- output: putdown
(or true (not A))
- input: JSON
- Test 2
- input: JSON
["Disjunction",["Conjunction",["LogicVariable","P"],["LogicVariable","Q"]],["Conjunction",["LogicVariable","Q"],["LogicVariable","P"]]]
- output: putdown
(or (and P Q) (and Q P))
- input: JSON
can convert propositional logic conditionals to putdown
- Test 1
- input: JSON
["Implication",["LogicVariable","A"],["Conjunction",["LogicVariable","Q"],["LogicalNegation",["LogicVariable","P"]]]]
- output: putdown
(implies A (and Q (not P)))
- input: JSON
- Test 2
- input: JSON
["Implication",["Implication",["Disjunction",["LogicVariable","P"],["LogicVariable","Q"]],["Conjunction",["LogicVariable","Q"],["LogicVariable","P"]]],["LogicVariable","T"]]
- output: putdown
(implies (implies (or P Q) (and Q P)) T)
- input: JSON
can convert propositional logic biconditionals to putdown
- Test 1
- input: JSON
["LogicalEquivalence",["LogicVariable","A"],["Conjunction",["LogicVariable","Q"],["LogicalNegation",["LogicVariable","P"]]]]
- output: putdown
(iff A (and Q (not P)))
- input: JSON
- Test 2
- input: JSON
["Implication",["LogicalEquivalence",["Disjunction",["LogicVariable","P"],["LogicVariable","Q"]],["Conjunction",["LogicVariable","Q"],["LogicVariable","P"]]],["LogicVariable","T"]]
- output: putdown
(implies (iff (or P Q) (and Q P)) T)
- input: JSON
can convert propositional expressions with groupers to putdown
- Test 1
- input: JSON
["Disjunction",["LogicVariable","P"],["Conjunction",["LogicalEquivalence",["LogicVariable","Q"],["LogicVariable","Q"]],["LogicVariable","P"]]]
- output: putdown
(or P (and (iff Q Q) P))
- input: JSON
- Test 2
- input: JSON
["LogicalNegation",["LogicalEquivalence","LogicalTrue","LogicalFalse"]]
- output: putdown
(not (iff true false))
- input: JSON
can convert simple predicate logic expressions to putdown
- Test 1
- input: JSON
["UniversalQuantifier",["NumberVariable","x"],["LogicVariable","P"]]
- output: putdown
(forall (x , P))
- input: JSON
- Test 2
- input: JSON
["ExistentialQuantifier",["NumberVariable","t"],["LogicalNegation",["LogicVariable","Q"]]]
- output: putdown
(exists (t , (not Q)))
- input: JSON
- Test 3
- input: JSON
["UniqueExistentialQuantifier",["NumberVariable","k"],["Implication",["LogicVariable","m"],["LogicVariable","n"]]]
- output: putdown
(exists! (k , (implies m n)))
- input: JSON
can convert finite and empty sets to putdown
- Test 1
- input: JSON
"EmptySet"
- output: putdown
emptyset
- input: JSON
- Test 2
- input: JSON
["FiniteSet",["OneElementSequence",["Number","1"]]]
- output: putdown
(finiteset (elts 1))
- input: JSON
- Test 3
- input: JSON
["FiniteSet",["ElementThenSequence",["Number","1"],["OneElementSequence",["Number","2"]]]]
- output: putdown
(finiteset (elts 1 (elts 2)))
- input: JSON
- Test 4
- input: JSON
["FiniteSet",["ElementThenSequence",["Number","1"],["ElementThenSequence",["Number","2"],["OneElementSequence",["Number","3"]]]]]
- output: putdown
(finiteset (elts 1 (elts 2 (elts 3))))
- input: JSON
- Test 5
- input: JSON
["FiniteSet",["ElementThenSequence","EmptySet",["OneElementSequence","EmptySet"]]]
- output: putdown
(finiteset (elts emptyset (elts emptyset)))
- input: JSON
- Test 6
- input: JSON
["FiniteSet",["OneElementSequence",["FiniteSet",["OneElementSequence","EmptySet"]]]]
- output: putdown
(finiteset (elts (finiteset (elts emptyset))))
- input: JSON
- Test 7
- input: JSON
["FiniteSet",["ElementThenSequence",["Number","3"],["OneElementSequence",["NumberVariable","x"]]]]
- output: putdown
(finiteset (elts 3 (elts x)))
- input: JSON
- Test 8
- input: JSON
["FiniteSet",["ElementThenSequence",["SetUnion",["SetVariable","A"],["SetVariable","B"]],["OneElementSequence",["SetIntersection",["SetVariable","A"],["SetVariable","B"]]]]]
- output: putdown
(finiteset (elts (union A B) (elts (intersection A B))))
- input: JSON
- Test 9
- input: JSON
["FiniteSet",["ElementThenSequence",["Number","1"],["ElementThenSequence",["Number","2"],["ElementThenSequence","EmptySet",["ElementThenSequence",["NumberVariable","K"],["OneElementSequence",["NumberVariable","P"]]]]]]]
- output: putdown
(finiteset (elts 1 (elts 2 (elts emptyset (elts K (elts P))))))
- input: JSON
can convert tuples and vectors to putdown
- Test 1
- input: JSON
["Tuple",["ElementThenSequence",["Number","5"],["OneElementSequence",["Number","6"]]]]
- output: putdown
(tuple (elts 5 (elts 6)))
- input: JSON
- Test 2
- input: JSON
["Tuple",["ElementThenSequence",["Number","5"],["ElementThenSequence",["SetUnion",["SetVariable","A"],["SetVariable","B"]],["OneElementSequence",["NumberVariable","k"]]]]]
- output: putdown
(tuple (elts 5 (elts (union A B) (elts k))))
- input: JSON
- Test 3
- input: JSON
["Vector",["NumberThenSequence",["Number","5"],["OneNumberSequence",["Number","6"]]]]
- output: putdown
(vector (elts 5 (elts 6)))
- input: JSON
- Test 4
- input: JSON
["Vector",["NumberThenSequence",["Number","5"],["NumberThenSequence",["NumberNegation",["Number","7"]],["OneNumberSequence",["NumberVariable","k"]]]]]
- output: putdown
(vector (elts 5 (elts (- 7) (elts k))))
- input: JSON
- Test 5
- input: JSON
["Tuple",["ElementThenSequence",["Tuple",["ElementThenSequence",["Number","1"],["OneElementSequence",["Number","2"]]]],["OneElementSequence",["Number","6"]]]]
- output: putdown
(tuple (elts (tuple (elts 1 (elts 2))) (elts 6)))
- input: JSON
can convert simple set memberships and subsets to putdown
- Test 1
- input: JSON
["NounIsElement",["NumberVariable","b"],["SetVariable","B"]]
- output: putdown
(in b B)
- input: JSON
- Test 2
- input: JSON
["NounIsElement",["Number","2"],["FiniteSet",["ElementThenSequence",["Number","1"],["OneElementSequence",["Number","2"]]]]]
- output: putdown
(in 2 (finiteset (elts 1 (elts 2))))
- input: JSON
- Test 3
- input: JSON
["NounIsElement",["NumberVariable","X"],["SetUnion",["SetVariable","a"],["SetVariable","b"]]]
- output: putdown
(in X (union a b))
- input: JSON
- Test 4
- input: JSON
["NounIsElement",["SetUnion",["SetVariable","A"],["SetVariable","B"]],["SetUnion",["SetVariable","X"],["SetVariable","Y"]]]
- output: putdown
(in (union A B) (union X Y))
- input: JSON
- Test 5
- input: JSON
["Subset",["SetVariable","A"],["SetComplement",["SetVariable","B"]]]
- output: putdown
(subset A (complement B))
- input: JSON
- Test 6
- input: JSON
["SubsetOrEqual",["SetIntersection",["SetVariable","u"],["SetVariable","v"]],["SetUnion",["SetVariable","u"],["SetVariable","v"]]]
- output: putdown
(subseteq (intersection u v) (union u v))
- input: JSON
- Test 7
- input: JSON
["SubsetOrEqual",["FiniteSet",["OneElementSequence",["Number","1"]]],["SetUnion",["FiniteSet",["OneElementSequence",["Number","1"]]],["FiniteSet",["OneElementSequence",["Number","2"]]]]]
- output: putdown
(subseteq (finiteset (elts 1)) (union (finiteset (elts 1)) (finiteset (elts 2))))
- input: JSON
- Test 8
- input: JSON
["NounIsElement",["NumberVariable","p"],["SetCartesianProduct",["SetVariable","U"],["SetVariable","V"]]]
- output: putdown
(in p (cartesianproduct U V))
- input: JSON
- Test 9
- input: JSON
["NounIsElement",["NumberVariable","q"],["SetUnion",["SetComplement",["SetVariable","U"]],["SetCartesianProduct",["SetVariable","V"],["SetVariable","W"]]]]
- output: putdown
(in q (union (complement U) (cartesianproduct V W)))
- input: JSON
- Test 10
- input: JSON
["NounIsElement",["Tuple",["ElementThenSequence",["NumberVariable","a"],["OneElementSequence",["NumberVariable","b"]]]],["SetCartesianProduct",["SetVariable","A"],["SetVariable","B"]]]
- output: putdown
(in (tuple (elts a (elts b))) (cartesianproduct A B))
- input: JSON
- Test 11
- input: JSON
["NounIsElement",["Vector",["NumberThenSequence",["NumberVariable","a"],["OneNumberSequence",["NumberVariable","b"]]]],["SetCartesianProduct",["SetVariable","A"],["SetVariable","B"]]]
- output: putdown
(in (vector (elts a (elts b))) (cartesianproduct A B))
- input: JSON
creates the canonical form for "notin" notation
- Test 1
- input: JSON
["NounIsNotElement",["NumberVariable","a"],["SetVariable","A"]]
- output: putdown
(not (in a A))
- input: JSON
- Test 2
- input: JSON
["LogicalNegation",["NounIsElement","EmptySet","EmptySet"]]
- output: putdown
(not (in emptyset emptyset))
- input: JSON
- Test 3
- input: JSON
["NounIsNotElement",["Subtraction",["Number","3"],["Number","5"]],["SetIntersection",["SetVariable","K"],["SetVariable","P"]]]
- output: putdown
(not (in (- 3 5) (intersection K P)))
- input: JSON
can convert to putdown sentences built from various relations
- Test 1
- input: JSON
["Disjunction",["LogicVariable","P"],["NounIsElement",["NumberVariable","b"],["SetVariable","B"]]]
- output: putdown
(or P (in b B))
- input: JSON
- Test 2
- input: JSON
["UniversalQuantifier",["NumberVariable","x"],["NounIsElement",["NumberVariable","x"],["SetVariable","X"]]]
- output: putdown
(forall (x , (in x X)))
- input: JSON
- Test 3
- input: JSON
["Conjunction",["SubsetOrEqual",["SetVariable","A"],["SetVariable","B"]],["SubsetOrEqual",["SetVariable","B"],["SetVariable","A"]]]
- output: putdown
(and (subseteq A B) (subseteq B A))
- input: JSON
- Test 4
- input: JSON
["Equals",["NumberVariable","R"],["SetCartesianProduct",["SetVariable","A"],["SetVariable","B"]]]
- output: putdown
(= R (cartesianproduct A B))
- input: JSON
- Test 5
- input: JSON
["UniversalQuantifier",["NumberVariable","n"],["BinaryRelationHolds","Divides",["NumberVariable","n"],["Factorial",["NumberVariable","n"]]]]
- output: putdown
(forall (n , (relationholds | n (! n))))
- input: JSON
- Test 6
- input: JSON
["Implication",["BinaryRelationHolds","GenericBinaryRelation",["NumberVariable","a"],["NumberVariable","b"]],["BinaryRelationHolds","GenericBinaryRelation",["NumberVariable","b"],["NumberVariable","a"]]]
- output: putdown
(implies (relationholds ~ a b) (relationholds ~ b a))
- input: JSON
can create putdown notation related to functions
- Test 1
- input: JSON
["FunctionSignature",["FunctionVariable","f"],["SetVariable","A"],["SetVariable","B"]]
- output: putdown
(function f A B)
- input: JSON
- Test 2
- input: JSON
["LogicalNegation",["FunctionSignature",["FunctionVariable","F"],["SetUnion",["SetVariable","X"],["SetVariable","Y"]],["SetVariable","Z"]]]
- output: putdown
(not (function F (union X Y) Z))
- input: JSON
- Test 3
- input: JSON
["FunctionSignature",["FunctionComposition",["FunctionVariable","f"],["FunctionVariable","g"]],["SetVariable","A"],["SetVariable","C"]]
- output: putdown
(function (compose f g) A C)
- input: JSON
- Test 4
- input: JSON
["NumberFunctionApplication",["FunctionVariable","f"],["NumberVariable","x"]]
- output: putdown
(apply f x)
- input: JSON
- Test 5
- input: JSON
["NumberFunctionApplication",["FunctionInverse",["FunctionVariable","f"]],["NumberFunctionApplication",["FunctionInverse",["FunctionVariable","g"]],["Number","10"]]]
- output: putdown
(apply (inverse f) (apply (inverse g) 10))
- input: JSON
- Test 6
- input: JSON
["NumberFunctionApplication",["FunctionVariable","E"],["SetComplement",["SetVariable","L"]]]
- output: putdown
(apply E (complement L))
- input: JSON
- Test 7
- input: JSON
["SetIntersection","EmptySet",["SetFunctionApplication",["FunctionVariable","f"],["Number","2"]]]
- output: putdown
(intersection emptyset (apply f 2))
- input: JSON
- Test 8
- input: JSON
["Conjunction",["PropositionFunctionApplication",["FunctionVariable","P"],["NumberVariable","e"]],["PropositionFunctionApplication",["FunctionVariable","Q"],["Addition",["Number","3"],["NumberVariable","b"]]]]
- output: putdown
(and (apply P e) (apply Q (+ 3 b)))
- input: JSON
- Test 9
- input: JSON
["EqualFunctions",["FunctionVariable","F"],["FunctionComposition",["FunctionVariable","G"],["FunctionInverse",["FunctionVariable","H"]]]]
- output: putdown
(= F (compose G (inverse H)))
- input: JSON
can express trigonometric functions correctly
- Test 1
- input: JSON
["NumberFunctionApplication","SineFunction",["NumberVariable","x"]]
- output: putdown
(apply sin x)
- input: JSON
- Test 2
- input: JSON
["NumberFunctionApplication","CosineFunction",["Multiplication","Pi",["NumberVariable","x"]]]
- output: putdown
(apply cos (* pi x))
- input: JSON
- Test 3
- input: JSON
["NumberFunctionApplication","TangentFunction",["NumberVariable","t"]]
- output: putdown
(apply tan t)
- input: JSON
- Test 4
- input: JSON
["Division",["Number","1"],["NumberFunctionApplication","CotangentFunction","Pi"]]
- output: putdown
(/ 1 (apply cot pi))
- input: JSON
- Test 5
- input: JSON
["Equals",["NumberFunctionApplication","SecantFunction",["NumberVariable","y"]],["NumberFunctionApplication","CosecantFunction",["NumberVariable","y"]]]
- output: putdown
(= (apply sec y) (apply csc y))
- input: JSON
can express logarithms correctly
- Test 1
- input: JSON
["PrefixFunctionApplication","Logarithm",["NumberVariable","n"]]
- output: putdown
(apply log n)
- input: JSON
- Test 2
- input: JSON
["Addition",["Number","1"],["PrefixFunctionApplication","NaturalLogarithm",["NumberVariable","x"]]]
- output: putdown
(+ 1 (apply ln x))
- input: JSON
- Test 3
- input: JSON
["PrefixFunctionApplication",["LogarithmWithBase",["Number","2"]],["Number","1024"]]
- output: putdown
(apply (logbase 2) 1024)
- input: JSON
- Test 4
- input: JSON
["Division",["PrefixFunctionApplication","Logarithm",["NumberVariable","n"]],["PrefixFunctionApplication","Logarithm",["PrefixFunctionApplication","Logarithm",["NumberVariable","n"]]]]
- output: putdown
(/ (apply log n) (apply log (apply log n)))
- input: JSON
can express equivalence classes and expressions that use them
- Test 1
- input: JSON
["EquivalenceClass",["Number","1"],"ApproximatelyEqual"]
- output: putdown
(equivclass 1 ~~)
- input: JSON
- Test 2
- input: JSON
["EquivalenceClass",["Addition",["NumberVariable","x"],["Number","2"]],"GenericBinaryRelation"]
- output: putdown
(equivclass (+ x 2) ~)
- input: JSON
- Test 3
- input: JSON
["SetUnion",["EquivalenceClass",["Number","1"],"ApproximatelyEqual"],["EquivalenceClass",["Number","2"],"ApproximatelyEqual"]]
- output: putdown
(union (equivclass 1 ~~) (equivclass 2 ~~))
- input: JSON
- Test 4
- input: JSON
["NounIsElement",["Number","7"],["EquivalenceClass",["Number","7"],"GenericBinaryRelation"]]
- output: putdown
(in 7 (equivclass 7 ~))
- input: JSON
- Test 5
- input: JSON
["EquivalenceClass",["FunctionVariable","P"],"GenericBinaryRelation"]
- output: putdown
(equivclass P ~)
- input: JSON
can express equivalence and classes mod a number
- Test 1
- input: JSON
["EquivalentModulo",["Number","5"],["Number","11"],["Number","3"]]
- output: putdown
(=mod 5 11 3)
- input: JSON
- Test 2
- input: JSON
["EquivalentModulo",["NumberVariable","k"],["NumberVariable","m"],["NumberVariable","n"]]
- output: putdown
(=mod k m n)
- input: JSON
- Test 3
- input: JSON
["Subset","EmptySet",["EquivalenceClassModulo",["NumberNegation",["Number","1"]],["Number","10"]]]
- output: putdown
(subset emptyset (modclass (- 1) 10))
- input: JSON
can construct type sentences and combinations of them
- Test 1
- input: JSON
["HasType",["NumberVariable","x"],"SetType"]
- output: putdown
(hastype x settype)
- input: JSON
- Test 2
- input: JSON
["HasType",["NumberVariable","n"],"NumberType"]
- output: putdown
(hastype n numbertype)
- input: JSON
- Test 3
- input: JSON
["HasType",["NumberVariable","S"],"PartialOrderType"]
- output: putdown
(hastype S partialordertype)
- input: JSON
- Test 4
- input: JSON
["Conjunction",["HasType",["Number","1"],"NumberType"],["HasType",["Number","10"],"NumberType"]]
- output: putdown
(and (hastype 1 numbertype) (hastype 10 numbertype))
- input: JSON
- Test 5
- input: JSON
["Implication",["HasType",["NumberVariable","R"],"EquivalenceRelationType"],["HasType",["NumberVariable","R"],"RelationType"]]
- output: putdown
(implies (hastype R equivalencerelationtype) (hastype R relationtype))
- input: JSON
can create notation for expression function application
- Test 1
- input: JSON
["NumberEFA",["FunctionVariable","f"],["NumberVariable","x"]]
- output: putdown
(efa f x)
- input: JSON
- Test 2
- input: JSON
["NumberFunctionApplication",["FunctionVariable","F"],["NumberEFA",["FunctionVariable","k"],["Number","10"]]]
- output: putdown
(apply F (efa k 10))
- input: JSON
- Test 3
- input: JSON
["NumberEFA",["FunctionVariable","E"],["SetComplement",["SetVariable","L"]]]
- output: putdown
(efa E (complement L))
- input: JSON
- Test 4
- input: JSON
["SetIntersection","EmptySet",["SetEFA",["FunctionVariable","f"],["Number","2"]]]
- output: putdown
(intersection emptyset (efa f 2))
- input: JSON
- Test 5
- input: JSON
["Conjunction",["PropositionEFA",["FunctionVariable","P"],["NumberVariable","x"]],["PropositionEFA",["FunctionVariable","Q"],["NumberVariable","y"]]]
- output: putdown
(and (efa P x) (efa Q y))
- input: JSON
can create notation for assumptions
- Test 1
- input: JSON
["Given_Variant1",["LogicVariable","X"]]
- output: putdown
:X
- input: JSON
- Test 2
- input: JSON
["Given_Variant2",["LogicVariable","X"]]
- output: putdown
:X
- input: JSON
- Test 3
- input: JSON
["Given_Variant3",["LogicVariable","X"]]
- output: putdown
:X
- input: JSON
- Test 4
- input: JSON
["Given_Variant4",["LogicVariable","X"]]
- output: putdown
:X
- input: JSON
- Test 5
- input: JSON
["Given_Variant1",["Equals",["NumberVariable","k"],["Number","1000"]]]
- output: putdown
:(= k 1000)
- input: JSON
- Test 6
- input: JSON
["Given_Variant2",["Equals",["NumberVariable","k"],["Number","1000"]]]
- output: putdown
:(= k 1000)
- input: JSON
- Test 7
- input: JSON
["Given_Variant3",["Equals",["NumberVariable","k"],["Number","1000"]]]
- output: putdown
:(= k 1000)
- input: JSON
- Test 8
- input: JSON
["Given_Variant4",["Equals",["NumberVariable","k"],["Number","1000"]]]
- output: putdown
:(= k 1000)
- input: JSON
- Test 9
- input: JSON
["Given_Variant1","LogicalTrue"]
- output: putdown
:true
- input: JSON
- Test 10
- input: JSON
["Given_Variant2","LogicalTrue"]
- output: putdown
:true
- input: JSON
- Test 11
- input: JSON
["Given_Variant3","LogicalTrue"]
- output: putdown
:true
- input: JSON
- Test 12
- input: JSON
["Given_Variant4","LogicalTrue"]
- output: putdown
:true
- input: JSON
can create notation for Let-style declarations
- Test 1
- input: JSON
["Let_Variant1",["NumberVariable","x"]]
- output: putdown
:[x]
- input: JSON
- Test 2
- input: JSON
["Let_Variant1",["NumberVariable","T"]]
- output: putdown
:[T]
- input: JSON
- Test 3
- input: JSON
["LetBeSuchThat_Variant1",["NumberVariable","x"],["GreaterThan",["NumberVariable","x"],["Number","0"]]]
- output: putdown
:[x , (> x 0)]
- input: JSON
- Test 4
- input: JSON
["LetBeSuchThat_Variant1",["NumberVariable","T"],["Disjunction",["Equals",["NumberVariable","T"],["Number","5"]],["NounIsElement",["NumberVariable","T"],["SetVariable","S"]]]]
- output: putdown
:[T , (or (= T 5) (in T S))]
- input: JSON
can create notation for For Some-style declarations
- Test 1
- input: JSON
["ForSome_Variant1",["NumberVariable","x"],["GreaterThan",["NumberVariable","x"],["Number","0"]]]
- output: putdown
[x , (> x 0)]
- input: JSON
- Test 2
- input: JSON
["ForSome_Variant2",["NumberVariable","x"],["GreaterThan",["NumberVariable","x"],["Number","0"]]]
- output: putdown
[x , (> x 0)]
- input: JSON
- Test 3
- input: JSON
["ForSome_Variant3",["NumberVariable","x"],["GreaterThan",["NumberVariable","x"],["Number","0"]]]
- output: putdown
[x , (> x 0)]
- input: JSON
- Test 4
- input: JSON
["ForSome_Variant4",["NumberVariable","x"],["GreaterThan",["NumberVariable","x"],["Number","0"]]]
- output: putdown
[x , (> x 0)]
- input: JSON
- Test 5
- input: JSON
["ForSome_Variant1",["NumberVariable","T"],["Disjunction",["Equals",["NumberVariable","T"],["Number","5"]],["NounIsElement",["NumberVariable","T"],["SetVariable","S"]]]]
- output: putdown
[T , (or (= T 5) (in T S))]
- input: JSON
- Test 6
- input: JSON
["ForSome_Variant2",["NumberVariable","T"],["Disjunction",["Equals",["NumberVariable","T"],["Number","5"]],["NounIsElement",["NumberVariable","T"],["SetVariable","S"]]]]
- output: putdown
[T , (or (= T 5) (in T S))]
- input: JSON
- Test 7
- input: JSON
["ForSome_Variant3",["NumberVariable","T"],["Disjunction",["Equals",["NumberVariable","T"],["Number","5"]],["NounIsElement",["NumberVariable","T"],["SetVariable","S"]]]]
- output: putdown
[T , (or (= T 5) (in T S))]
- input: JSON
- Test 8
- input: JSON
["ForSome_Variant4",["NumberVariable","T"],["Disjunction",["Equals",["NumberVariable","T"],["Number","5"]],["NounIsElement",["NumberVariable","T"],["SetVariable","S"]]]]
- output: putdown
[T , (or (= T 5) (in T S))]
- input: JSON
Parsing LaTeX
can parse many kinds of numbers to JSON
- Test 1
- input: LaTeX
0
, typeset $0$ - output: JSON
["Number","0"]
- input: LaTeX
- Test 2
- input: LaTeX
453789
, typeset $453789$ - output: JSON
["Number","453789"]
- input: LaTeX
- Test 3
- input: LaTeX
99999999999999999999999999999999999999999
, typeset $99999999999999999999999999999999999999999$ - output: JSON
["Number","99999999999999999999999999999999999999999"]
- input: LaTeX
- Test 4
- input: LaTeX
-453789
, typeset $-453789$ - output: JSON
["NumberNegation",["Number","453789"]]
- input: LaTeX
- Test 5
- input: LaTeX
-99999999999999999999999999999999999999999
, typeset $-99999999999999999999999999999999999999999$ - output: JSON
["NumberNegation",["Number","99999999999999999999999999999999999999999"]]
- input: LaTeX
- Test 6
- input: LaTeX
0.0
, typeset $0.0$ - output: JSON
["Number","0.0"]
- input: LaTeX
- Test 7
- input: LaTeX
29835.6875940
, typeset $29835.6875940$ - output: JSON
["Number","29835.6875940"]
- input: LaTeX
- Test 8
- input: LaTeX
653280458689.
, typeset $653280458689.$ - output: JSON
["Number","653280458689."]
- input: LaTeX
- Test 9
- input: LaTeX
.000006327589
, typeset $.000006327589$ - output: JSON
["Number",".000006327589"]
- input: LaTeX
- Test 10
- input: LaTeX
-29835.6875940
, typeset $-29835.6875940$ - output: JSON
["NumberNegation",["Number","29835.6875940"]]
- input: LaTeX
- Test 11
- input: LaTeX
-653280458689.
, typeset $-653280458689.$ - output: JSON
["NumberNegation",["Number","653280458689."]]
- input: LaTeX
- Test 12
- input: LaTeX
-.000006327589
, typeset $-.000006327589$ - output: JSON
["NumberNegation",["Number",".000006327589"]]
- input: LaTeX
can parse one-letter variable names to JSON
- Test 1
- input: LaTeX
foo
, typeset $foo$ - output: JSON
null
- input: LaTeX
- Test 2
- input: LaTeX
bar
, typeset $bar$ - output: JSON
null
- input: LaTeX
- Test 3
- input: LaTeX
to
, typeset $to$ - output: JSON
null
- input: LaTeX
can parse LaTeX numeric constants to JSON
- Test 1
- input: LaTeX
\infty
, typeset $\infty$ - output: JSON
"Infinity"
- input: LaTeX
- Test 2
- input: LaTeX
\pi
, typeset $\pi$ - output: JSON
"Pi"
- input: LaTeX
can parse exponentiation of atomics to JSON
- Test 1
- input: LaTeX
1^2
, typeset $1^2$ - output: JSON
["Exponentiation",["Number","1"],["Number","2"]]
- input: LaTeX
- Test 2
- input: LaTeX
e^x
, typeset $e^x$ - output: JSON
["Exponentiation","EulersNumber",["NumberVariable","x"]]
- input: LaTeX
- Test 3
- input: LaTeX
1^\infty
, typeset $1^\infty$ - output: JSON
["Exponentiation",["Number","1"],"Infinity"]
- input: LaTeX
can parse atomic percentages and factorials to JSON
- Test 1
- input: LaTeX
10\%
, typeset $10\%$ - output: JSON
["Percentage",["Number","10"]]
- input: LaTeX
- Test 2
- input: LaTeX
t\%
, typeset $t\%$ - output: JSON
["Percentage",["NumberVariable","t"]]
- input: LaTeX
- Test 3
- input: LaTeX
77!
, typeset $77!$ - output: JSON
["Factorial",["Number","77"]]
- input: LaTeX
- Test 4
- input: LaTeX
y!
, typeset $y!$ - output: JSON
["Factorial",["NumberVariable","y"]]
- input: LaTeX
can parse division of atomics or factors to JSON
- Test 1
- input: LaTeX
1\div2
, typeset $1\div2$ - output: JSON
["Division",["Number","1"],["Number","2"]]
- input: LaTeX
- Test 2
- input: LaTeX
x\div y
, typeset $x\div y$ - output: JSON
["Division",["NumberVariable","x"],["NumberVariable","y"]]
- input: LaTeX
- Test 3
- input: LaTeX
0\div\infty
, typeset $0\div\infty$ - output: JSON
["Division",["Number","0"],"Infinity"]
- input: LaTeX
- Test 4
- input: LaTeX
x^2\div3
, typeset $x^2\div3$ - output: JSON
["Division",["Exponentiation",["NumberVariable","x"],["Number","2"]],["Number","3"]]
- input: LaTeX
- Test 5
- input: LaTeX
1\div e^x
, typeset $1\div e^x$ - output: JSON
["Division",["Number","1"],["Exponentiation","EulersNumber",["NumberVariable","x"]]]
- input: LaTeX
- Test 6
- input: LaTeX
10\%\div2^{100}
, typeset $10\%\div2^{100}$ - output: JSON
["Division",["Percentage",["Number","10"]],["Exponentiation",["Number","2"],["Number","100"]]]
- input: LaTeX
can parse multiplication of atomics or factors to JSON
- Test 1
- input: LaTeX
1\times2
, typeset $1\times2$ - output: JSON
["Multiplication",["Number","1"],["Number","2"]]
- input: LaTeX
- Test 2
- input: LaTeX
x\cdot y
, typeset $x\cdot y$ - output: JSON
["Multiplication",["NumberVariable","x"],["NumberVariable","y"]]
- input: LaTeX
- Test 3
- input: LaTeX
0\times\infty
, typeset $0\times\infty$ - output: JSON
["Multiplication",["Number","0"],"Infinity"]
- input: LaTeX
- Test 4
- input: LaTeX
x^2\cdot3
, typeset $x^2\cdot3$ - output: JSON
["Multiplication",["Exponentiation",["NumberVariable","x"],["Number","2"]],["Number","3"]]
- input: LaTeX
- Test 5
- input: LaTeX
1\times e^x
, typeset $1\times e^x$ - output: JSON
["Multiplication",["Number","1"],["Exponentiation","EulersNumber",["NumberVariable","x"]]]
- input: LaTeX
- Test 6
- input: LaTeX
10\%\cdot2^{100}
, typeset $10\%\cdot2^{100}$ - output: JSON
["Multiplication",["Percentage",["Number","10"]],["Exponentiation",["Number","2"],["Number","100"]]]
- input: LaTeX
can parse negations of atomics or factors to JSON
- Test 1
- input: LaTeX
-1\times2
, typeset $-1\times2$ - output: JSON
["Multiplication",["NumberNegation",["Number","1"]],["Number","2"]]
- input: LaTeX
- Test 2
- input: LaTeX
x\cdot{-y}
, typeset $x\cdot{-y}$ - output: JSON
["Multiplication",["NumberVariable","x"],["NumberNegation",["NumberVariable","y"]]]
- input: LaTeX
- Test 3
- input: LaTeX
{-x^2}\cdot{-3}
, typeset ${-x^2}\cdot{-3}$ - output: JSON
["Multiplication",["NumberNegation",["Exponentiation",["NumberVariable","x"],["Number","2"]]],["NumberNegation",["Number","3"]]]
- input: LaTeX
- Test 4
- input: LaTeX
(-x^2)\cdot(-3)
, typeset $(-x^2)\cdot(-3)$ - output: JSON
["Multiplication",["NumberNegation",["Exponentiation",["NumberVariable","x"],["Number","2"]]],["NumberNegation",["Number","3"]]]
- input: LaTeX
- Test 5
- input: LaTeX
----1000
, typeset $----1000$ - output: JSON
["NumberNegation",["NumberNegation",["NumberNegation",["NumberNegation",["Number","1000"]]]]]
- input: LaTeX
can convert additions and subtractions to JSON
- Test 1
- input: LaTeX
x+y
, typeset $x+y$ - output: JSON
["Addition",["NumberVariable","x"],["NumberVariable","y"]]
- input: LaTeX
- Test 2
- input: LaTeX
1--3
, typeset $1--3$ - output: JSON
["Subtraction",["Number","1"],["NumberNegation",["Number","3"]]]
- input: LaTeX
can parse number expressions with groupers to JSON
- Test 1
- input: LaTeX
-{1\times2}
, typeset $-{1\times2}$ - output: JSON
["NumberNegation",["Multiplication",["Number","1"],["Number","2"]]]
- input: LaTeX
- Test 2
- input: LaTeX
-(1\times2)
, typeset $-(1\times2)$ - output: JSON
["NumberNegation",["Multiplication",["Number","1"],["Number","2"]]]
- input: LaTeX
- Test 3
- input: LaTeX
(N-1)!
, typeset $(N-1)!$ - output: JSON
["Factorial",["Subtraction",["NumberVariable","N"],["Number","1"]]]
- input: LaTeX
- Test 4
- input: LaTeX
\left(N-1\right)!
, typeset $\left(N-1\right)!$ - output: JSON
["Factorial",["Subtraction",["NumberVariable","N"],["Number","1"]]]
- input: LaTeX
- Test 5
- input: LaTeX
\left(N-1)!
, typeset $\left(N-1)!$ - output: JSON
null
- input: LaTeX
- Test 6
- input: LaTeX
(N-1\right)!
, typeset $(N-1\right)!$ - output: JSON
null
- input: LaTeX
- Test 7
- input: LaTeX
{-x}^{2\cdot{-3}}
, typeset ${-x}^{2\cdot{-3}}$ - output: JSON
["Exponentiation",["NumberNegation",["NumberVariable","x"]],["Multiplication",["Number","2"],["NumberNegation",["Number","3"]]]]
- input: LaTeX
- Test 8
- input: LaTeX
(-x)^(2\cdot(-3))
, typeset $(-x)^(2\cdot(-3))$ - output: JSON
["Exponentiation",["NumberNegation",["NumberVariable","x"]],["Multiplication",["Number","2"],["NumberNegation",["Number","3"]]]]
- input: LaTeX
- Test 9
- input: LaTeX
(-x)^{2\cdot(-3)}
, typeset $(-x)^{2\cdot(-3)}$ - output: JSON
["Exponentiation",["NumberNegation",["NumberVariable","x"]],["Multiplication",["Number","2"],["NumberNegation",["Number","3"]]]]
- input: LaTeX
- Test 10
- input: LaTeX
A^B+(C-D)
, typeset $A^B+(C-D)$ - output: JSON
["Addition",["Exponentiation",["NumberVariable","A"],["NumberVariable","B"]],["Subtraction",["NumberVariable","C"],["NumberVariable","D"]]]
- input: LaTeX
- Test 11
- input: LaTeX
A^B+\left(C-D\right)
, typeset $A^B+\left(C-D\right)$ - output: JSON
["Addition",["Exponentiation",["NumberVariable","A"],["NumberVariable","B"]],["Subtraction",["NumberVariable","C"],["NumberVariable","D"]]]
- input: LaTeX
- Test 12
- input: LaTeX
k^{1-y}\cdot(2+k)
, typeset $k^{1-y}\cdot(2+k)$ - output: JSON
["Multiplication",["Exponentiation",["NumberVariable","k"],["Subtraction",["Number","1"],["NumberVariable","y"]]],["Addition",["Number","2"],["NumberVariable","k"]]]
- input: LaTeX
can parse relations of numeric expressions to JSON
- Test 1
- input: LaTeX
1>2
, typeset $1>2$ - output: JSON
["GreaterThan",["Number","1"],["Number","2"]]
- input: LaTeX
- Test 2
- input: LaTeX
1\gt2
, typeset $1\gt2$ - output: JSON
["GreaterThan",["Number","1"],["Number","2"]]
- input: LaTeX
- Test 3
- input: LaTeX
1-2<1+2
, typeset $1-2<1+2$ - output: JSON
["LessThan",["Subtraction",["Number","1"],["Number","2"]],["Addition",["Number","1"],["Number","2"]]]
- input: LaTeX
- Test 4
- input: LaTeX
1-2\lt1+2
, typeset $1-2\lt1+2$ - output: JSON
["LessThan",["Subtraction",["Number","1"],["Number","2"]],["Addition",["Number","1"],["Number","2"]]]
- input: LaTeX
- Test 5
- input: LaTeX
\neg 1=2
, typeset $\neg 1=2$ - output: JSON
["LogicalNegation",["Equals",["Number","1"],["Number","2"]]]
- input: LaTeX
- Test 6
- input: LaTeX
2\ge1\wedge2\le3
, typeset $2\ge1\wedge2\le3$ - output: JSON
["Conjunction",["GreaterThanOrEqual",["Number","2"],["Number","1"]],["LessThanOrEqual",["Number","2"],["Number","3"]]]
- input: LaTeX
- Test 7
- input: LaTeX
2\geq1\wedge2\leq3
, typeset $2\geq1\wedge2\leq3$ - output: JSON
["Conjunction",["GreaterThanOrEqual",["Number","2"],["Number","1"]],["LessThanOrEqual",["Number","2"],["Number","3"]]]
- input: LaTeX
- Test 8
- input: LaTeX
7|14
, typeset $7|14$ - output: JSON
["BinaryRelationHolds","Divides",["Number","7"],["Number","14"]]
- input: LaTeX
- Test 9
- input: LaTeX
7\vert14
, typeset $7\vert14$ - output: JSON
["BinaryRelationHolds","Divides",["Number","7"],["Number","14"]]
- input: LaTeX
- Test 10
- input: LaTeX
A(k) | n!
, typeset $A(k) | n!$ - output: JSON
["BinaryRelationHolds","Divides",["NumberFunctionApplication",["FunctionVariable","A"],["NumberVariable","k"]],["Factorial",["NumberVariable","n"]]]
- input: LaTeX
- Test 11
- input: LaTeX
A(k) \vert n!
, typeset $A(k) \vert n!$ - output: JSON
["BinaryRelationHolds","Divides",["NumberFunctionApplication",["FunctionVariable","A"],["NumberVariable","k"]],["Factorial",["NumberVariable","n"]]]
- input: LaTeX
- Test 12
- input: LaTeX
1-k \sim 1+k
, typeset $1-k \sim 1+k$ - output: JSON
["BinaryRelationHolds","GenericBinaryRelation",["Subtraction",["Number","1"],["NumberVariable","k"]],["Addition",["Number","1"],["NumberVariable","k"]]]
- input: LaTeX
- Test 13
- input: LaTeX
0.99\approx1.01
, typeset $0.99\approx1.01$ - output: JSON
["BinaryRelationHolds","ApproximatelyEqual",["Number","0.99"],["Number","1.01"]]
- input: LaTeX
converts inequality to its placeholder concept
- Test 1
- input: LaTeX
1\ne2
, typeset $1\ne2$ - output: JSON
["NotEqual",["Number","1"],["Number","2"]]
- input: LaTeX
- Test 2
- input: LaTeX
1\neq2
, typeset $1\neq2$ - output: JSON
["NotEqual",["Number","1"],["Number","2"]]
- input: LaTeX
can parse propositional logic atomics to JSON
- Test 1
- input: LaTeX
\top
, typeset $\top$ - output: JSON
"LogicalTrue"
- input: LaTeX
- Test 2
- input: LaTeX
\bot
, typeset $\bot$ - output: JSON
"LogicalFalse"
- input: LaTeX
- Test 3
- input: LaTeX
\rightarrow\leftarrow
, typeset $\rightarrow\leftarrow$ - output: JSON
"Contradiction"
- input: LaTeX
can parse propositional logic conjuncts to JSON
- Test 1
- input: LaTeX
\top\wedge\bot
, typeset $\top\wedge\bot$ - output: JSON
["Conjunction","LogicalTrue","LogicalFalse"]
- input: LaTeX
- Test 2
- input: LaTeX
\neg P\wedge\neg\top
, typeset $\neg P\wedge\neg\top$ - output: JSON
["Conjunction",["LogicalNegation",["LogicVariable","P"]],["LogicalNegation","LogicalTrue"]]
- input: LaTeX
can parse propositional logic disjuncts to JSON
- Test 1
- input: LaTeX
\top\vee \neg A
, typeset $\top\vee \neg A$ - output: JSON
["Disjunction","LogicalTrue",["LogicalNegation",["LogicVariable","A"]]]
- input: LaTeX
- Test 2
- input: LaTeX
P\wedge Q\vee Q\wedge P
, typeset $P\wedge Q\vee Q\wedge P$ - output: JSON
["Disjunction",["Conjunction",["LogicVariable","P"],["LogicVariable","Q"]],["Conjunction",["LogicVariable","Q"],["LogicVariable","P"]]]
- input: LaTeX
can parse propositional logic conditionals to JSON
- Test 1
- input: LaTeX
A\Rightarrow Q\wedge\neg P
, typeset $A\Rightarrow Q\wedge\neg P$ - output: JSON
["Implication",["LogicVariable","A"],["Conjunction",["LogicVariable","Q"],["LogicalNegation",["LogicVariable","P"]]]]
- input: LaTeX
- Test 2
- input: LaTeX
P\vee Q\Rightarrow Q\wedge P\Rightarrow T
, typeset $P\vee Q\Rightarrow Q\wedge P\Rightarrow T$ - output: JSON
["Implication",["Disjunction",["LogicVariable","P"],["LogicVariable","Q"]],["Implication",["Conjunction",["LogicVariable","Q"],["LogicVariable","P"]],["LogicVariable","T"]]]
- input: LaTeX
can parse propositional logic biconditionals to JSON
- Test 1
- input: LaTeX
A\Leftrightarrow Q\wedge\neg P
, typeset $A\Leftrightarrow Q\wedge\neg P$ - output: JSON
["LogicalEquivalence",["LogicVariable","A"],["Conjunction",["LogicVariable","Q"],["LogicalNegation",["LogicVariable","P"]]]]
- input: LaTeX
can parse propositional expressions with groupers to JSON
- Test 1
- input: LaTeX
P\lor {Q\Leftrightarrow Q}\land P
, typeset $P\lor {Q\Leftrightarrow Q}\land P$ - output: JSON
["Disjunction",["LogicVariable","P"],["Conjunction",["LogicalEquivalence",["LogicVariable","Q"],["LogicVariable","Q"]],["LogicVariable","P"]]]
- input: LaTeX
- Test 2
- input: LaTeX
\lnot{\top\Leftrightarrow\bot}
, typeset $\lnot{\top\Leftrightarrow\bot}$ - output: JSON
["LogicalNegation",["LogicalEquivalence","LogicalTrue","LogicalFalse"]]
- input: LaTeX
- Test 3
- input: LaTeX
\lnot\left(\top\Leftrightarrow\bot\right)
, typeset $\lnot\left(\top\Leftrightarrow\bot\right)$ - output: JSON
["LogicalNegation",["LogicalEquivalence","LogicalTrue","LogicalFalse"]]
- input: LaTeX
- Test 4
- input: LaTeX
\lnot(\top\Leftrightarrow\bot)
, typeset $\lnot(\top\Leftrightarrow\bot)$ - output: JSON
["LogicalNegation",["LogicalEquivalence","LogicalTrue","LogicalFalse"]]
- input: LaTeX
can parse simple predicate logic expressions to JSON
- Test 1
- input: LaTeX
\forall x, P
, typeset $\forall x, P$ - output: JSON
["UniversalQuantifier",["NumberVariable","x"],["LogicVariable","P"]]
- input: LaTeX
- Test 2
- input: LaTeX
\exists t,\neg Q
, typeset $\exists t,\neg Q$ - output: JSON
["ExistentialQuantifier",["NumberVariable","t"],["LogicalNegation",["LogicVariable","Q"]]]
- input: LaTeX
- Test 3
- input: LaTeX
\exists! k,m\Rightarrow n
, typeset $\exists! k,m\Rightarrow n$ - output: JSON
["UniqueExistentialQuantifier",["NumberVariable","k"],["Implication",["LogicVariable","m"],["LogicVariable","n"]]]
- input: LaTeX
can convert finite and empty sets to JSON
- Test 1
- input: LaTeX
\emptyset
, typeset $\emptyset$ - output: JSON
"EmptySet"
- input: LaTeX
- Test 2
- input: LaTeX
\{\}
, typeset ${}$ - output: JSON
"EmptySet"
- input: LaTeX
- Test 3
- input: LaTeX
\{ \}
, typeset ${ }$ - output: JSON
"EmptySet"
- input: LaTeX
- Test 4
- input: LaTeX
\{ 1 \}
, typeset ${ 1 }$ - output: JSON
["FiniteSet",["OneElementSequence",["Number","1"]]]
- input: LaTeX
- Test 5
- input: LaTeX
\left\{ 1 \right\}
, typeset $\left{ 1 \right}$ - output: JSON
["FiniteSet",["OneElementSequence",["Number","1"]]]
- input: LaTeX
- Test 6
- input: LaTeX
\{1,2\}
, typeset ${1,2}$ - output: JSON
["FiniteSet",["ElementThenSequence",["Number","1"],["OneElementSequence",["Number","2"]]]]
- input: LaTeX
- Test 7
- input: LaTeX
\{1, 2, 3 \}
, typeset ${1, 2, 3 }$ - output: JSON
["FiniteSet",["ElementThenSequence",["Number","1"],["ElementThenSequence",["Number","2"],["OneElementSequence",["Number","3"]]]]]
- input: LaTeX
- Test 8
- input: LaTeX
\{\{\},\emptyset\}
, typeset ${{},\emptyset}$ - output: JSON
["FiniteSet",["ElementThenSequence","EmptySet",["OneElementSequence","EmptySet"]]]
- input: LaTeX
- Test 9
- input: LaTeX
\{\{\emptyset\}\}
, typeset ${{\emptyset}}$ - output: JSON
["FiniteSet",["OneElementSequence",["FiniteSet",["OneElementSequence","EmptySet"]]]]
- input: LaTeX
- Test 10
- input: LaTeX
\{ 3,x \}
, typeset ${ 3,x }$ - output: JSON
["FiniteSet",["ElementThenSequence",["Number","3"],["OneElementSequence",["NumberVariable","x"]]]]
- input: LaTeX
- Test 11
- input: LaTeX
\left\{ 3,x \right\}
, typeset $\left{ 3,x \right}$ - output: JSON
["FiniteSet",["ElementThenSequence",["Number","3"],["OneElementSequence",["NumberVariable","x"]]]]
- input: LaTeX
- Test 12
- input: LaTeX
\{ A\cup B, A\cap B \}
, typeset ${ A\cup B, A\cap B }$ - output: JSON
["FiniteSet",["ElementThenSequence",["SetUnion",["SetVariable","A"],["SetVariable","B"]],["OneElementSequence",["SetIntersection",["SetVariable","A"],["SetVariable","B"]]]]]
- input: LaTeX
- Test 13
- input: LaTeX
\{ 1, 2, \emptyset, K, P \}
, typeset ${ 1, 2, \emptyset, K, P }$ - output: JSON
["FiniteSet",["ElementThenSequence",["Number","1"],["ElementThenSequence",["Number","2"],["ElementThenSequence","EmptySet",["ElementThenSequence",["NumberVariable","K"],["OneElementSequence",["NumberVariable","P"]]]]]]]
- input: LaTeX
can convert tuples and vectors to JSON
- Test 1
- input: LaTeX
(5,6)
, typeset $(5,6)$ - output: JSON
["Tuple",["ElementThenSequence",["Number","5"],["OneElementSequence",["Number","6"]]]]
- input: LaTeX
- Test 2
- input: LaTeX
(5,A\cup B,k)
, typeset $(5,A\cup B,k)$ - output: JSON
["Tuple",["ElementThenSequence",["Number","5"],["ElementThenSequence",["SetUnion",["SetVariable","A"],["SetVariable","B"]],["OneElementSequence",["NumberVariable","k"]]]]]
- input: LaTeX
- Test 3
- input: LaTeX
\langle5,6\rangle
, typeset $\langle5,6\rangle$ - output: JSON
["Vector",["NumberThenSequence",["Number","5"],["OneNumberSequence",["Number","6"]]]]
- input: LaTeX
- Test 4
- input: LaTeX
\langle5,-7,k\rangle
, typeset $\langle5,-7,k\rangle$ - output: JSON
["Vector",["NumberThenSequence",["Number","5"],["NumberThenSequence",["NumberNegation",["Number","7"]],["OneNumberSequence",["NumberVariable","k"]]]]]
- input: LaTeX
- Test 5
- input: LaTeX
()
, typeset $()$ - output: JSON
null
- input: LaTeX
- Test 6
- input: LaTeX
(())
, typeset $(())$ - output: JSON
null
- input: LaTeX
- Test 7
- input: LaTeX
(3)
, typeset $(3)$ - output: JSON
["Number","3"]
- input: LaTeX
- Test 8
- input: LaTeX
\langle\rangle
, typeset $\langle\rangle$ - output: JSON
null
- input: LaTeX
- Test 9
- input: LaTeX
\langle3\rangle
, typeset $\langle3\rangle$ - output: JSON
null
- input: LaTeX
- Test 10
- input: LaTeX
((1,2),6)
, typeset $((1,2),6)$ - output: JSON
["Tuple",["ElementThenSequence",["Tuple",["ElementThenSequence",["Number","1"],["OneElementSequence",["Number","2"]]]],["OneElementSequence",["Number","6"]]]]
- input: LaTeX
- Test 11
- input: LaTeX
\langle(1,2),6\rangle
, typeset $\langle(1,2),6\rangle$ - output: JSON
null
- input: LaTeX
- Test 12
- input: LaTeX
\langle\langle1,2\rangle,6\rangle
, typeset $\langle\langle1,2\rangle,6\rangle$ - output: JSON
null
- input: LaTeX
- Test 13
- input: LaTeX
\langle A\cup B,6\rangle
, typeset $\langle A\cup B,6\rangle$ - output: JSON
null
- input: LaTeX
can convert simple set memberships and subsets to JSON
- Test 1
- input: LaTeX
b\in B
, typeset $b\in B$ - output: JSON
["NounIsElement",["NumberVariable","b"],["SetVariable","B"]]
- input: LaTeX
- Test 2
- input: LaTeX
2\in\{1,2\}
, typeset $2\in{1,2}$ - output: JSON
["NounIsElement",["Number","2"],["FiniteSet",["ElementThenSequence",["Number","1"],["OneElementSequence",["Number","2"]]]]]
- input: LaTeX
- Test 3
- input: LaTeX
X\in a\cup b
, typeset $X\in a\cup b$ - output: JSON
["NounIsElement",["NumberVariable","X"],["SetUnion",["SetVariable","a"],["SetVariable","b"]]]
- input: LaTeX
- Test 4
- input: LaTeX
A\cup B\in X\cup Y
, typeset $A\cup B\in X\cup Y$ - output: JSON
["NounIsElement",["SetUnion",["SetVariable","A"],["SetVariable","B"]],["SetUnion",["SetVariable","X"],["SetVariable","Y"]]]
- input: LaTeX
- Test 5
- input: LaTeX
A\subset\bar B
, typeset $A\subset\bar B$ - output: JSON
["Subset",["SetVariable","A"],["SetComplement",["SetVariable","B"]]]
- input: LaTeX
- Test 6
- input: LaTeX
A\subset B'
, typeset $A\subset B'$ - output: JSON
["Subset",["SetVariable","A"],["SetComplement",["SetVariable","B"]]]
- input: LaTeX
- Test 7
- input: LaTeX
u\cap v\subseteq u\cup v
, typeset $u\cap v\subseteq u\cup v$ - output: JSON
["SubsetOrEqual",["SetIntersection",["SetVariable","u"],["SetVariable","v"]],["SetUnion",["SetVariable","u"],["SetVariable","v"]]]
- input: LaTeX
- Test 8
- input: LaTeX
\{1\}\subseteq\{1\}\cup\{2\}
, typeset ${1}\subseteq{1}\cup{2}$ - output: JSON
["SubsetOrEqual",["FiniteSet",["OneElementSequence",["Number","1"]]],["SetUnion",["FiniteSet",["OneElementSequence",["Number","1"]]],["FiniteSet",["OneElementSequence",["Number","2"]]]]]
- input: LaTeX
- Test 9
- input: LaTeX
p\in U\times V
, typeset $p\in U\times V$ - output: JSON
["NounIsElement",["NumberVariable","p"],["SetCartesianProduct",["SetVariable","U"],["SetVariable","V"]]]
- input: LaTeX
- Test 10
- input: LaTeX
q \in U'\cup V\times W
, typeset $q \in U'\cup V\times W$ - output: JSON
["NounIsElement",["NumberVariable","q"],["SetUnion",["SetComplement",["SetVariable","U"]],["SetCartesianProduct",["SetVariable","V"],["SetVariable","W"]]]]
- input: LaTeX
- Test 11
- input: LaTeX
(a,b)\in A\times B
, typeset $(a,b)\in A\times B$ - output: JSON
["NounIsElement",["Tuple",["ElementThenSequence",["NumberVariable","a"],["OneElementSequence",["NumberVariable","b"]]]],["SetCartesianProduct",["SetVariable","A"],["SetVariable","B"]]]
- input: LaTeX
- Test 12
- input: LaTeX
\langle a,b\rangle\in A\times B
, typeset $\langle a,b\rangle\in A\times B$ - output: JSON
["NounIsElement",["Vector",["NumberThenSequence",["NumberVariable","a"],["OneNumberSequence",["NumberVariable","b"]]]],["SetCartesianProduct",["SetVariable","A"],["SetVariable","B"]]]
- input: LaTeX
converts "notin" notation to its placeholder concept
- Test 1
- input: LaTeX
a\notin A
, typeset $a\notin A$ - output: JSON
["NounIsNotElement",["NumberVariable","a"],["SetVariable","A"]]
- input: LaTeX
- Test 2
- input: LaTeX
\emptyset\notin\emptyset
, typeset $\emptyset\notin\emptyset$ - output: JSON
["NounIsNotElement","EmptySet","EmptySet"]
- input: LaTeX
- Test 3
- input: LaTeX
3-5 \notin K\cap P
, typeset $3-5 \notin K\cap P$ - output: JSON
["NounIsNotElement",["Subtraction",["Number","3"],["Number","5"]],["SetIntersection",["SetVariable","K"],["SetVariable","P"]]]
- input: LaTeX
can parse to JSON sentences built from various relations
- Test 1
- input: LaTeX
P\vee b\in B
, typeset $P\vee b\in B$ - output: JSON
["Disjunction",["LogicVariable","P"],["NounIsElement",["NumberVariable","b"],["SetVariable","B"]]]
- input: LaTeX
- Test 2
- input: LaTeX
{P \vee b} \in B
, typeset ${P \vee b} \in B$ - output: JSON
["PropositionIsElement",["Disjunction",["LogicVariable","P"],["LogicVariable","b"]],["SetVariable","B"]]
- input: LaTeX
- Test 3
- input: LaTeX
\forall x, x\in X
, typeset $\forall x, x\in X$ - output: JSON
["UniversalQuantifier",["NumberVariable","x"],["NounIsElement",["NumberVariable","x"],["SetVariable","X"]]]
- input: LaTeX
- Test 4
- input: LaTeX
A\subseteq B\wedge B\subseteq A
, typeset $A\subseteq B\wedge B\subseteq A$ - output: JSON
["Conjunction",["SubsetOrEqual",["SetVariable","A"],["SetVariable","B"]],["SubsetOrEqual",["SetVariable","B"],["SetVariable","A"]]]
- input: LaTeX
- Test 5
- input: LaTeX
R = A\cup B
, typeset $R = A\cup B$ - output: JSON
["Equals",["NumberVariable","R"],["SetUnion",["SetVariable","A"],["SetVariable","B"]]]
- input: LaTeX
- Test 6
- input: LaTeX
\forall n, n|n!
, typeset $\forall n, n|n!$ - output: JSON
["UniversalQuantifier",["NumberVariable","n"],["BinaryRelationHolds","Divides",["NumberVariable","n"],["Factorial",["NumberVariable","n"]]]]
- input: LaTeX
- Test 7
- input: LaTeX
a\sim b\Rightarrow b\sim a
, typeset $a\sim b\Rightarrow b\sim a$ - output: JSON
["Implication",["BinaryRelationHolds","GenericBinaryRelation",["NumberVariable","a"],["NumberVariable","b"]],["BinaryRelationHolds","GenericBinaryRelation",["NumberVariable","b"],["NumberVariable","a"]]]
- input: LaTeX
can parse notation related to functions
- Test 1
- input: LaTeX
f:A\to B
, typeset $f:A\to B$ - output: JSON
["FunctionSignature",["FunctionVariable","f"],["SetVariable","A"],["SetVariable","B"]]
- input: LaTeX
- Test 2
- input: LaTeX
f\colon A\to B
, typeset $f\colon A\to B$ - output: JSON
["FunctionSignature",["FunctionVariable","f"],["SetVariable","A"],["SetVariable","B"]]
- input: LaTeX
- Test 3
- input: LaTeX
\neg F:X\cup Y\rightarrow Z
, typeset $\neg F:X\cup Y\rightarrow Z$ - output: JSON
["LogicalNegation",["FunctionSignature",["FunctionVariable","F"],["SetUnion",["SetVariable","X"],["SetVariable","Y"]],["SetVariable","Z"]]]
- input: LaTeX
- Test 4
- input: LaTeX
\neg F\colon X\cup Y\rightarrow Z
, typeset $\neg F\colon X\cup Y\rightarrow Z$ - output: JSON
["LogicalNegation",["FunctionSignature",["FunctionVariable","F"],["SetUnion",["SetVariable","X"],["SetVariable","Y"]],["SetVariable","Z"]]]
- input: LaTeX
- Test 5
- input: LaTeX
f\circ g:A\to C
, typeset $f\circ g:A\to C$ - output: JSON
["FunctionSignature",["FunctionComposition",["FunctionVariable","f"],["FunctionVariable","g"]],["SetVariable","A"],["SetVariable","C"]]
- input: LaTeX
- Test 6
- input: LaTeX
f(x)
, typeset $f(x)$ - output: JSON
["NumberFunctionApplication",["FunctionVariable","f"],["NumberVariable","x"]]
- input: LaTeX
- Test 7
- input: LaTeX
f^{-1}(g^{-1}(10))
, typeset $f^{-1}(g^{-1}(10))$ - output: JSON
["NumberFunctionApplication",["FunctionInverse",["FunctionVariable","f"]],["NumberFunctionApplication",["FunctionInverse",["FunctionVariable","g"]],["Number","10"]]]
- input: LaTeX
- Test 8
- input: LaTeX
E(L')
, typeset $E(L')$ - output: JSON
["NumberFunctionApplication",["FunctionVariable","E"],["SetComplement",["SetVariable","L"]]]
- input: LaTeX
- Test 9
- input: LaTeX
\emptyset\cap f(2)
, typeset $\emptyset\cap f(2)$ - output: JSON
["SetIntersection","EmptySet",["SetFunctionApplication",["FunctionVariable","f"],["Number","2"]]]
- input: LaTeX
- Test 10
- input: LaTeX
P(e)\wedge Q(3+b)
, typeset $P(e)\wedge Q(3+b)$ - output: JSON
["Conjunction",["PropositionFunctionApplication",["FunctionVariable","P"],"EulersNumber"],["PropositionFunctionApplication",["FunctionVariable","Q"],["Addition",["Number","3"],["NumberVariable","b"]]]]
- input: LaTeX
- Test 11
- input: LaTeX
F=G\circ H^{-1}
, typeset $F=G\circ H^{-1}$ - output: JSON
["EqualFunctions",["FunctionVariable","F"],["FunctionComposition",["FunctionVariable","G"],["FunctionInverse",["FunctionVariable","H"]]]]
- input: LaTeX
can parse trigonometric functions correctly
- Test 1
- input: LaTeX
\sin x
, typeset $\sin x$ - output: JSON
["PrefixFunctionApplication","SineFunction",["NumberVariable","x"]]
- input: LaTeX
- Test 2
- input: LaTeX
\cos\pi\cdot x
, typeset $\cos\pi\cdot x$ - output: JSON
["PrefixFunctionApplication","CosineFunction",["Multiplication","Pi",["NumberVariable","x"]]]
- input: LaTeX
- Test 3
- input: LaTeX
\tan t
, typeset $\tan t$ - output: JSON
["PrefixFunctionApplication","TangentFunction",["NumberVariable","t"]]
- input: LaTeX
- Test 4
- input: LaTeX
1\div\cot\pi
, typeset $1\div\cot\pi$ - output: JSON
["Division",["Number","1"],["PrefixFunctionApplication","CotangentFunction","Pi"]]
- input: LaTeX
- Test 5
- input: LaTeX
\sec y=\csc y
, typeset $\sec y=\csc y$ - output: JSON
["Equals",["PrefixFunctionApplication","SecantFunction",["NumberVariable","y"]],["PrefixFunctionApplication","CosecantFunction",["NumberVariable","y"]]]
- input: LaTeX
can parse logarithms correctly
- Test 1
- input: LaTeX
\log n
, typeset $\log n$ - output: JSON
["PrefixFunctionApplication","Logarithm",["NumberVariable","n"]]
- input: LaTeX
- Test 2
- input: LaTeX
1+\ln{x}
, typeset $1+\ln{x}$ - output: JSON
["Addition",["Number","1"],["PrefixFunctionApplication","NaturalLogarithm",["NumberVariable","x"]]]
- input: LaTeX
- Test 3
- input: LaTeX
\log_2 1024
, typeset $\log_2 1024$ - output: JSON
["PrefixFunctionApplication",["LogarithmWithBase",["Number","2"]],["Number","1024"]]
- input: LaTeX
- Test 4
- input: LaTeX
\log_{2}{1024}
, typeset $\log_{2}{1024}$ - output: JSON
["PrefixFunctionApplication",["LogarithmWithBase",["Number","2"]],["Number","1024"]]
- input: LaTeX
- Test 5
- input: LaTeX
\log n \div \log\log n
, typeset $\log n \div \log\log n$ - output: JSON
["Division",["PrefixFunctionApplication","Logarithm",["NumberVariable","n"]],["PrefixFunctionApplication","Logarithm",["PrefixFunctionApplication","Logarithm",["NumberVariable","n"]]]]
- input: LaTeX
can parse equivalence classes and treat them as sets
- Test 1
- input: LaTeX
[1,\approx]
, typeset $[1,\approx]$ - output: JSON
["EquivalenceClass",["Number","1"],"ApproximatelyEqual"]
- input: LaTeX
- Test 2
- input: LaTeX
\left[1,\approx\right]
, typeset $\left[1,\approx\right]$ - output: JSON
["EquivalenceClass",["Number","1"],"ApproximatelyEqual"]
- input: LaTeX
- Test 3
- input: LaTeX
\lbrack1,\approx\rbrack
, typeset $\lbrack1,\approx\rbrack$ - output: JSON
["EquivalenceClass",["Number","1"],"ApproximatelyEqual"]
- input: LaTeX
- Test 4
- input: LaTeX
\left\lbrack1,\approx\right\rbrack
, typeset $\left\lbrack1,\approx\right\rbrack$ - output: JSON
["EquivalenceClass",["Number","1"],"ApproximatelyEqual"]
- input: LaTeX
- Test 5
- input: LaTeX
\left[1,\approx]
, typeset $\left[1,\approx]$ - output: JSON
null
- input: LaTeX
- Test 6
- input: LaTeX
[1,\approx\right]
, typeset $[1,\approx\right]$ - output: JSON
null
- input: LaTeX
- Test 7
- input: LaTeX
[x+2,\sim]
, typeset $[x+2,\sim]$ - output: JSON
["EquivalenceClass",["Addition",["NumberVariable","x"],["Number","2"]],"GenericBinaryRelation"]
- input: LaTeX
- Test 8
- input: LaTeX
[1,\approx]\cup[2,\approx]
, typeset $[1,\approx]\cup[2,\approx]$ - output: JSON
["SetUnion",["EquivalenceClass",["Number","1"],"ApproximatelyEqual"],["EquivalenceClass",["Number","2"],"ApproximatelyEqual"]]
- input: LaTeX
- Test 9
- input: LaTeX
7\in[7,\sim]
, typeset $7\in[7,\sim]$ - output: JSON
["NounIsElement",["Number","7"],["EquivalenceClass",["Number","7"],"GenericBinaryRelation"]]
- input: LaTeX
- Test 10
- input: LaTeX
[P]
, typeset $[P]$ - output: JSON
["GenericEquivalenceClass",["NumberVariable","P"]]
- input: LaTeX
- Test 11
- input: LaTeX
\left[P\right]
, typeset $\left[P\right]$ - output: JSON
["GenericEquivalenceClass",["NumberVariable","P"]]
- input: LaTeX
can parse equivalence and classes mod a number
- Test 1
- input: LaTeX
5\equiv11\mod3
, typeset $5\equiv11\mod3$ - output: JSON
["EquivalentModulo",["Number","5"],["Number","11"],["Number","3"]]
- input: LaTeX
- Test 2
- input: LaTeX
5\equiv_3 11
, typeset $5\equiv_3 11$ - output: JSON
["EquivalentModulo",["Number","5"],["Number","11"],["Number","3"]]
- input: LaTeX
- Test 3
- input: LaTeX
k \equiv m \mod n
, typeset $k \equiv m \mod n$ - output: JSON
["EquivalentModulo",["NumberVariable","k"],["NumberVariable","m"],["NumberVariable","n"]]
- input: LaTeX
- Test 4
- input: LaTeX
k \equiv_n m
, typeset $k \equiv_n m$ - output: JSON
["EquivalentModulo",["NumberVariable","k"],["NumberVariable","m"],["NumberVariable","n"]]
- input: LaTeX
- Test 5
- input: LaTeX
k \equiv_{n} m
, typeset $k \equiv_{n} m$ - output: JSON
["EquivalentModulo",["NumberVariable","k"],["NumberVariable","m"],["NumberVariable","n"]]
- input: LaTeX
- Test 6
- input: LaTeX
\emptyset \subset [-1,\equiv_10]
, typeset $\emptyset \subset [-1,\equiv_10]$ - output: JSON
["Subset","EmptySet",["EquivalenceClassModulo",["NumberNegation",["Number","1"]],["Number","10"]]]
- input: LaTeX
- Test 7
- input: LaTeX
\emptyset \subset \left[-1,\equiv_10\right]
, typeset $\emptyset \subset \left[-1,\equiv_10\right]$ - output: JSON
["Subset","EmptySet",["EquivalenceClassModulo",["NumberNegation",["Number","1"]],["Number","10"]]]
- input: LaTeX
can parse type sentences and combinations of them
- Test 1
- input: LaTeX
x \text{is a set}
, typeset $x \text{is a set}$ - output: JSON
["HasType",["NumberVariable","x"],"SetType"]
- input: LaTeX
- Test 2
- input: LaTeX
n \text{is }\text{a number}
, typeset $n \text{is }\text{a number}$ - output: JSON
["HasType",["NumberVariable","n"],"NumberType"]
- input: LaTeX
- Test 3
- input: LaTeX
S\text{is}~\text{a partial order}
, typeset $S\text{is}~\text{a partial order}$ - output: JSON
["HasType",["NumberVariable","S"],"PartialOrderType"]
- input: LaTeX
- Test 4
- input: LaTeX
1\text{is a number}\wedge 10\text{is a number}
, typeset $1\text{is a number}\wedge 10\text{is a number}$ - output: JSON
["Conjunction",["HasType",["Number","1"],"NumberType"],["HasType",["Number","10"],"NumberType"]]
- input: LaTeX
- Test 5
- input: LaTeX
R\text{is an equivalence relation}\Rightarrow R\text{is a relation}
, typeset $R\text{is an equivalence relation}\Rightarrow R\text{is a relation}$ - output: JSON
["Implication",["HasType",["NumberVariable","R"],"EquivalenceRelationType"],["HasType",["NumberVariable","R"],"RelationType"]]
- input: LaTeX
can parse notation for expression function application
- Test 1
- input: LaTeX
\mathcal{f}(x)
, typeset $\mathcal{f}(x)$ - output: JSON
["NumberEFA",["FunctionVariable","f"],["NumberVariable","x"]]
- input: LaTeX
- Test 2
- input: LaTeX
F(\mathcal{k}(10))
, typeset $F(\mathcal{k}(10))$ - output: JSON
["NumberFunctionApplication",["FunctionVariable","F"],["NumberEFA",["FunctionVariable","k"],["Number","10"]]]
- input: LaTeX
- Test 3
- input: LaTeX
\mathcal{E}(L')
, typeset $\mathcal{E}(L')$ - output: JSON
["NumberEFA",["FunctionVariable","E"],["SetComplement",["SetVariable","L"]]]
- input: LaTeX
- Test 4
- input: LaTeX
\emptyset\cap\mathcal{f}(2)
, typeset $\emptyset\cap\mathcal{f}(2)$ - output: JSON
["SetIntersection","EmptySet",["SetEFA",["FunctionVariable","f"],["Number","2"]]]
- input: LaTeX
- Test 5
- input: LaTeX
\mathcal{P}(x)\wedge\mathcal{Q}(y)
, typeset $\mathcal{P}(x)\wedge\mathcal{Q}(y)$ - output: JSON
["Conjunction",["PropositionEFA",["FunctionVariable","P"],["NumberVariable","x"]],["PropositionEFA",["FunctionVariable","Q"],["NumberVariable","y"]]]
- input: LaTeX
can parse notation for assumptions
- Test 1
- input: LaTeX
\text{Assume }X
, typeset $\text{Assume }X$ - output: JSON
["Given_Variant1",["LogicVariable","X"]]
- input: LaTeX
- Test 2
- input: LaTeX
\text{assume }X
, typeset $\text{assume }X$ - output: JSON
["Given_Variant2",["LogicVariable","X"]]
- input: LaTeX
- Test 3
- input: LaTeX
\text{Given }X
, typeset $\text{Given }X$ - output: JSON
["Given_Variant3",["LogicVariable","X"]]
- input: LaTeX
- Test 4
- input: LaTeX
\text{given }X
, typeset $\text{given }X$ - output: JSON
["Given_Variant4",["LogicVariable","X"]]
- input: LaTeX
- Test 5
- input: LaTeX
\text{Assume }k=1000
, typeset $\text{Assume }k=1000$ - output: JSON
["Given_Variant1",["Equals",["NumberVariable","k"],["Number","1000"]]]
- input: LaTeX
- Test 6
- input: LaTeX
\text{assume }k=1000
, typeset $\text{assume }k=1000$ - output: JSON
["Given_Variant2",["Equals",["NumberVariable","k"],["Number","1000"]]]
- input: LaTeX
- Test 7
- input: LaTeX
\text{Given }k=1000
, typeset $\text{Given }k=1000$ - output: JSON
["Given_Variant3",["Equals",["NumberVariable","k"],["Number","1000"]]]
- input: LaTeX
- Test 8
- input: LaTeX
\text{given }k=1000
, typeset $\text{given }k=1000$ - output: JSON
["Given_Variant4",["Equals",["NumberVariable","k"],["Number","1000"]]]
- input: LaTeX
- Test 9
- input: LaTeX
\text{Assume }\top
, typeset $\text{Assume }\top$ - output: JSON
["Given_Variant1","LogicalTrue"]
- input: LaTeX
- Test 10
- input: LaTeX
\text{assume }\top
, typeset $\text{assume }\top$ - output: JSON
["Given_Variant2","LogicalTrue"]
- input: LaTeX
- Test 11
- input: LaTeX
\text{Given }\top
, typeset $\text{Given }\top$ - output: JSON
["Given_Variant3","LogicalTrue"]
- input: LaTeX
- Test 12
- input: LaTeX
\text{given }\top
, typeset $\text{given }\top$ - output: JSON
["Given_Variant4","LogicalTrue"]
- input: LaTeX
- Test 13
- input: LaTeX
\text{Assume }50
, typeset $\text{Assume }50$ - output: JSON
null
- input: LaTeX
- Test 14
- input: LaTeX
\text{assume }(5,6)
, typeset $\text{assume }(5,6)$ - output: JSON
null
- input: LaTeX
- Test 15
- input: LaTeX
\text{Given }f\circ g
, typeset $\text{Given }f\circ g$ - output: JSON
null
- input: LaTeX
- Test 16
- input: LaTeX
\text{given }\emptyset
, typeset $\text{given }\emptyset$ - output: JSON
null
- input: LaTeX
- Test 17
- input: LaTeX
\text{Assume }\infty
, typeset $\text{Assume }\infty$ - output: JSON
null
- input: LaTeX
can parse notation for Let-style declarations
- Test 1
- input: LaTeX
\text{Let }x
, typeset $\text{Let }x$ - output: JSON
["Let_Variant1",["NumberVariable","x"]]
- input: LaTeX
- Test 2
- input: LaTeX
\text{let }x
, typeset $\text{let }x$ - output: JSON
["Let_Variant2",["NumberVariable","x"]]
- input: LaTeX
- Test 3
- input: LaTeX
\text{Let }T
, typeset $\text{Let }T$ - output: JSON
["Let_Variant1",["NumberVariable","T"]]
- input: LaTeX
- Test 4
- input: LaTeX
\text{let }T
, typeset $\text{let }T$ - output: JSON
["Let_Variant2",["NumberVariable","T"]]
- input: LaTeX
- Test 5
- input: LaTeX
\text{Let }x \text{ be such that }x>0
, typeset $\text{Let }x \text{ be such that }x>0$ - output: JSON
["LetBeSuchThat_Variant1",["NumberVariable","x"],["GreaterThan",["NumberVariable","x"],["Number","0"]]]
- input: LaTeX
- Test 6
- input: LaTeX
\text{let }x \text{ be such that }x>0
, typeset $\text{let }x \text{ be such that }x>0$ - output: JSON
["LetBeSuchThat_Variant2",["NumberVariable","x"],["GreaterThan",["NumberVariable","x"],["Number","0"]]]
- input: LaTeX
- Test 7
- input: LaTeX
\text{Let }T \text{ be such that }T=5\vee T\in S
, typeset $\text{Let }T \text{ be such that }T=5\vee T\in S$ - output: JSON
["LetBeSuchThat_Variant1",["NumberVariable","T"],["Disjunction",["Equals",["NumberVariable","T"],["Number","5"]],["NounIsElement",["NumberVariable","T"],["SetVariable","S"]]]]
- input: LaTeX
- Test 8
- input: LaTeX
\text{let }T \text{ be such that }T=5\vee T\in S
, typeset $\text{let }T \text{ be such that }T=5\vee T\in S$ - output: JSON
["LetBeSuchThat_Variant2",["NumberVariable","T"],["Disjunction",["Equals",["NumberVariable","T"],["Number","5"]],["NounIsElement",["NumberVariable","T"],["SetVariable","S"]]]]
- input: LaTeX
- Test 9
- input: LaTeX
\text{Let }x>5
, typeset $\text{Let }x>5$ - output: JSON
null
- input: LaTeX
- Test 10
- input: LaTeX
\text{Let }1=1
, typeset $\text{Let }1=1$ - output: JSON
null
- input: LaTeX
- Test 11
- input: LaTeX
\text{Let }\emptyset
, typeset $\text{Let }\emptyset$ - output: JSON
null
- input: LaTeX
- Test 12
- input: LaTeX
\text{Let }x \text{ be such that }1
, typeset $\text{Let }x \text{ be such that }1$ - output: JSON
null
- input: LaTeX
- Test 13
- input: LaTeX
\text{Let }x \text{ be such that }1\vee 2
, typeset $\text{Let }x \text{ be such that }1\vee 2$ - output: JSON
null
- input: LaTeX
- Test 14
- input: LaTeX
\text{Let }x \text{ be such that }\text{Let }y
, typeset $\text{Let }x \text{ be such that }\text{Let }y$ - output: JSON
null
- input: LaTeX
- Test 15
- input: LaTeX
\text{Let }x \text{ be such that }\text{Assume }B
, typeset $\text{Let }x \text{ be such that }\text{Assume }B$ - output: JSON
null
- input: LaTeX
can parse notation for For Some-style declarations
- Test 1
- input: LaTeX
\text{For some }x, x>0
, typeset $\text{For some }x, x>0$ - output: JSON
["ForSome_Variant1",["NumberVariable","x"],["GreaterThan",["NumberVariable","x"],["Number","0"]]]
- input: LaTeX
- Test 2
- input: LaTeX
\text{for some }x, x>0
, typeset $\text{for some }x, x>0$ - output: JSON
["ForSome_Variant2",["NumberVariable","x"],["GreaterThan",["NumberVariable","x"],["Number","0"]]]
- input: LaTeX
- Test 3
- input: LaTeX
x>0 \text{ for some } x
, typeset $x>0 \text{ for some } x$ - output: JSON
["ForSome_Variant3",["NumberVariable","x"],["GreaterThan",["NumberVariable","x"],["Number","0"]]]
- input: LaTeX
- Test 4
- input: LaTeX
x>0~\text{for some}~x
, typeset $x>0~\text{for some}~x$ - output: JSON
["ForSome_Variant4",["NumberVariable","x"],["GreaterThan",["NumberVariable","x"],["Number","0"]]]
- input: LaTeX
- Test 5
- input: LaTeX
\text{For some }T, T=5\vee T\in S
, typeset $\text{For some }T, T=5\vee T\in S$ - output: JSON
["ForSome_Variant1",["NumberVariable","T"],["Disjunction",["Equals",["NumberVariable","T"],["Number","5"]],["NounIsElement",["NumberVariable","T"],["SetVariable","S"]]]]
- input: LaTeX
- Test 6
- input: LaTeX
\text{for some }T, T=5\vee T\in S
, typeset $\text{for some }T, T=5\vee T\in S$ - output: JSON
["ForSome_Variant2",["NumberVariable","T"],["Disjunction",["Equals",["NumberVariable","T"],["Number","5"]],["NounIsElement",["NumberVariable","T"],["SetVariable","S"]]]]
- input: LaTeX
- Test 7
- input: LaTeX
T=5\vee T\in S \text{ for some } T
, typeset $T=5\vee T\in S \text{ for some } T$ - output: JSON
["ForSome_Variant3",["NumberVariable","T"],["Disjunction",["Equals",["NumberVariable","T"],["Number","5"]],["NounIsElement",["NumberVariable","T"],["SetVariable","S"]]]]
- input: LaTeX
- Test 8
- input: LaTeX
T=5\vee T\in S~\text{for some}~T
, typeset $T=5\vee T\in S~\text{for some}~T$ - output: JSON
["ForSome_Variant4",["NumberVariable","T"],["Disjunction",["Equals",["NumberVariable","T"],["Number","5"]],["NounIsElement",["NumberVariable","T"],["SetVariable","S"]]]]
- input: LaTeX
- Test 9
- input: LaTeX
\text{For some }x
, typeset $\text{For some }x$ - output: JSON
null
- input: LaTeX
- Test 10
- input: LaTeX
\text{for some }x
, typeset $\text{for some }x$ - output: JSON
null
- input: LaTeX
- Test 11
- input: LaTeX
\text{For some }T
, typeset $\text{For some }T$ - output: JSON
null
- input: LaTeX
- Test 12
- input: LaTeX
\text{for some }T
, typeset $\text{for some }T$ - output: JSON
null
- input: LaTeX
- Test 13
- input: LaTeX
\text{For some }x>5, x>55
, typeset $\text{For some }x>5, x>55$ - output: JSON
null
- input: LaTeX
- Test 14
- input: LaTeX
\text{For some }1=1, P
, typeset $\text{For some }1=1, P$ - output: JSON
null
- input: LaTeX
- Test 15
- input: LaTeX
\text{For some }\emptyset, 1+1=2
, typeset $\text{For some }\emptyset, 1+1=2$ - output: JSON
null
- input: LaTeX
- Test 16
- input: LaTeX
x>55 \text{ for some } x>5
, typeset $x>55 \text{ for some } x>5$ - output: JSON
null
- input: LaTeX
- Test 17
- input: LaTeX
P \text{ for some } 1=1
, typeset $P \text{ for some } 1=1$ - output: JSON
null
- input: LaTeX
- Test 18
- input: LaTeX
\emptyset \text{ for some } 1+1=2
, typeset $\emptyset \text{ for some } 1+1=2$ - output: JSON
null
- input: LaTeX
- Test 19
- input: LaTeX
\text{For some }x, 1
, typeset $\text{For some }x, 1$ - output: JSON
null
- input: LaTeX
- Test 20
- input: LaTeX
\text{For some }x, 1\vee 2
, typeset $\text{For some }x, 1\vee 2$ - output: JSON
null
- input: LaTeX
- Test 21
- input: LaTeX
\text{For some }x, \text{Let }y
, typeset $\text{For some }x, \text{Let }y$ - output: JSON
null
- input: LaTeX
- Test 22
- input: LaTeX
\text{For some }x, \text{Assume }B
, typeset $\text{For some }x, \text{Assume }B$ - output: JSON
null
- input: LaTeX
- Test 23
- input: LaTeX
1~\text{for some}~x
, typeset $1~\text{for some}~x$ - output: JSON
null
- input: LaTeX
- Test 24
- input: LaTeX
1\vee 2~\text{for some}~x
, typeset $1\vee 2~\text{for some}~x$ - output: JSON
null
- input: LaTeX
- Test 25
- input: LaTeX
\text{Let }y~\text{for some}~x
, typeset $\text{Let }y~\text{for some}~x$ - output: JSON
null
- input: LaTeX
- Test 26
- input: LaTeX
\text{Assume }B~\text{for some}~x
, typeset $\text{Assume }B~\text{for some}~x$ - output: JSON
null
- input: LaTeX
Rendering JSON into LaTeX
can convert JSON numbers to LaTeX
- Test 1
- input: JSON
["Number","0"]
- output: LaTeX
0
, typeset $0$
- input: JSON
- Test 2
- input: JSON
["Number","453789"]
- output: LaTeX
453789
, typeset $453789$
- input: JSON
- Test 3
- input: JSON
["Number","99999999999999999999999999999999999999999"]
- output: LaTeX
99999999999999999999999999999999999999999
, typeset $99999999999999999999999999999999999999999$
- input: JSON
- Test 4
- input: JSON
["NumberNegation",["Number","453789"]]
- output: LaTeX
-453789
, typeset $-453789$
- input: JSON
- Test 5
- input: JSON
["NumberNegation",["Number","99999999999999999999999999999999999999999"]]
- output: LaTeX
-99999999999999999999999999999999999999999
, typeset $-99999999999999999999999999999999999999999$
- input: JSON
- Test 6
- input: JSON
["Number","0.0"]
- output: LaTeX
0.0
, typeset $0.0$
- input: JSON
- Test 7
- input: JSON
["Number","29835.6875940"]
- output: LaTeX
29835.6875940
, typeset $29835.6875940$
- input: JSON
- Test 8
- input: JSON
["Number","653280458689."]
- output: LaTeX
653280458689.
, typeset $653280458689.$
- input: JSON
- Test 9
- input: JSON
["Number",".000006327589"]
- output: LaTeX
.000006327589
, typeset $.000006327589$
- input: JSON
- Test 10
- input: JSON
["NumberNegation",["Number","29835.6875940"]]
- output: LaTeX
-29835.6875940
, typeset $-29835.6875940$
- input: JSON
- Test 11
- input: JSON
["NumberNegation",["Number","653280458689."]]
- output: LaTeX
-653280458689.
, typeset $-653280458689.$
- input: JSON
- Test 12
- input: JSON
["NumberNegation",["Number",".000006327589"]]
- output: LaTeX
-.000006327589
, typeset $-.000006327589$
- input: JSON
can convert any size variable name from JSON to LaTeX
- Test 1
- input: JSON
["NumberVariable","x"]
- output: LaTeX
x
, typeset $x$
- input: JSON
- Test 2
- input: JSON
["NumberVariable","E"]
- output: LaTeX
E
, typeset $E$
- input: JSON
- Test 3
- input: JSON
["NumberVariable","q"]
- output: LaTeX
q
, typeset $q$
- input: JSON
- Test 4
- input: JSON
["NumberVariable","foo"]
- output: LaTeX
foo
, typeset $foo$
- input: JSON
- Test 5
- input: JSON
["NumberVariable","bar"]
- output: LaTeX
bar
, typeset $bar$
- input: JSON
- Test 6
- input: JSON
["NumberVariable","to"]
- output: LaTeX
to
, typeset $to$
- input: JSON
can convert numeric constants from JSON to LaTeX
- Test 1
- input: JSON
"Infinity"
- output: LaTeX
\infty
, typeset $\infty$
- input: JSON
- Test 2
- input: JSON
"Pi"
- output: LaTeX
\pi
, typeset $\pi$
- input: JSON
- Test 3
- input: JSON
"EulersNumber"
- output: LaTeX
e
, typeset $e$
- input: JSON
can convert exponentiation of atomics from JSON to LaTeX
- Test 1
- input: JSON
["Exponentiation",["Number","1"],["Number","2"]]
- output: LaTeX
1^2
, typeset $1^2$
- input: JSON
- Test 2
- input: JSON
["Exponentiation",["NumberVariable","e"],["NumberVariable","x"]]
- output: LaTeX
e^x
, typeset $e^x$
- input: JSON
- Test 3
- input: JSON
["Exponentiation",["Number","1"],"Infinity"]
- output: LaTeX
1^\infty
, typeset $1^\infty$
- input: JSON
can convert atomic percentages and factorials from JSON to LaTeX
- Test 1
- input: JSON
["Percentage",["Number","10"]]
- output: LaTeX
10\%
, typeset $10\%$
- input: JSON
- Test 2
- input: JSON
["Percentage",["NumberVariable","t"]]
- output: LaTeX
t\%
, typeset $t\%$
- input: JSON
- Test 3
- input: JSON
["Factorial",["Number","10"]]
- output: LaTeX
10!
, typeset $10!$
- input: JSON
- Test 4
- input: JSON
["Factorial",["NumberVariable","t"]]
- output: LaTeX
t!
, typeset $t!$
- input: JSON
can convert division of atomics or factors from JSON to LaTeX
- Test 1
- input: JSON
["Division",["Number","1"],["Number","2"]]
- output: LaTeX
1\div 2
, typeset $1\div 2$
- input: JSON
- Test 2
- input: JSON
["Division",["NumberVariable","x"],["NumberVariable","y"]]
- output: LaTeX
x\div y
, typeset $x\div y$
- input: JSON
- Test 3
- input: JSON
["Division",["Number","0"],"Infinity"]
- output: LaTeX
0\div \infty
, typeset $0\div \infty$
- input: JSON
- Test 4
- input: JSON
["Division",["Exponentiation",["NumberVariable","x"],["Number","2"]],["Number","3"]]
- output: LaTeX
x^2\div 3
, typeset $x^2\div 3$
- input: JSON
- Test 5
- input: JSON
["Division",["Number","1"],["Exponentiation",["NumberVariable","e"],["NumberVariable","x"]]]
- output: LaTeX
1\div e^x
, typeset $1\div e^x$
- input: JSON
- Test 6
- input: JSON
["Division",["Percentage",["Number","10"]],["Exponentiation",["Number","2"],["Number","100"]]]
- output: LaTeX
10\%\div 2^100
, typeset $10\%\div 2^100$
- input: JSON
can convert multiplication of atomics or factors from JSON to LaTeX
- Test 1
- input: JSON
["Multiplication",["Number","1"],["Number","2"]]
- output: LaTeX
1\times 2
, typeset $1\times 2$
- input: JSON
- Test 2
- input: JSON
["Multiplication",["NumberVariable","x"],["NumberVariable","y"]]
- output: LaTeX
x\times y
, typeset $x\times y$
- input: JSON
- Test 3
- input: JSON
["Multiplication",["Number","0"],"Infinity"]
- output: LaTeX
0\times \infty
, typeset $0\times \infty$
- input: JSON
- Test 4
- input: JSON
["Multiplication",["Exponentiation",["NumberVariable","x"],["Number","2"]],["Number","3"]]
- output: LaTeX
x^2\times 3
, typeset $x^2\times 3$
- input: JSON
- Test 5
- input: JSON
["Multiplication",["Number","1"],["Exponentiation",["NumberVariable","e"],["NumberVariable","x"]]]
- output: LaTeX
1\times e^x
, typeset $1\times e^x$
- input: JSON
- Test 6
- input: JSON
["Multiplication",["Percentage",["Number","10"]],["Exponentiation",["Number","2"],["Number","100"]]]
- output: LaTeX
10\%\times 2^100
, typeset $10\%\times 2^100$
- input: JSON
can convert negations of atomics or factors from JSON to LaTeX
- Test 1
- input: JSON
["Multiplication",["NumberNegation",["Number","1"]],["Number","2"]]
- output: LaTeX
-1\times 2
, typeset $-1\times 2$
- input: JSON
- Test 2
- input: JSON
["Multiplication",["NumberVariable","x"],["NumberNegation",["NumberVariable","y"]]]
- output: LaTeX
x\times -y
, typeset $x\times -y$
- input: JSON
- Test 3
- input: JSON
["Multiplication",["NumberNegation",["Exponentiation",["NumberVariable","x"],["Number","2"]]],["NumberNegation",["Number","3"]]]
- output: LaTeX
-x^2\times -3
, typeset $-x^2\times -3$
- input: JSON
- Test 4
- input: JSON
["NumberNegation",["NumberNegation",["NumberNegation",["NumberNegation",["Number","1000"]]]]]
- output: LaTeX
----1000
, typeset $----1000$
- input: JSON
can convert additions and subtractions from JSON to LaTeX
- Test 1
- input: JSON
["Addition",["NumberVariable","x"],["NumberVariable","y"]]
- output: LaTeX
x+y
, typeset $x+y$
- input: JSON
- Test 2
- input: JSON
["Subtraction",["Number","1"],["NumberNegation",["Number","3"]]]
- output: LaTeX
1--3
, typeset $1--3$
- input: JSON
- Test 3
- input: JSON
["Subtraction",["Addition",["Exponentiation",["NumberVariable","A"],["NumberVariable","B"]],["NumberVariable","C"]],"Pi"]
- output: LaTeX
A^B+C-\pi
, typeset $A^B+C-\pi$
- input: JSON
can convert Number expressions with groupers from JSON to LaTeX
- Test 1
- input: JSON
["NumberNegation",["Multiplication",["Number","1"],["Number","2"]]]
- output: LaTeX
-1\times 2
, typeset $-1\times 2$
- input: JSON
- Test 2
- input: JSON
["Factorial",["Addition",["Number","1"],["Number","2"]]]
- output: LaTeX
{1+2}!
, typeset ${1+2}!$
- input: JSON
- Test 3
- input: JSON
["Exponentiation",["NumberNegation",["NumberVariable","x"]],["Multiplication",["Number","2"],["NumberNegation",["Number","3"]]]]
- output: LaTeX
{-x}^{2\times -3}
, typeset ${-x}^{2\times -3}$
- input: JSON
- Test 4
- input: JSON
["Addition",["Exponentiation",["NumberVariable","A"],["NumberVariable","B"]],["Subtraction",["NumberVariable","C"],["NumberVariable","D"]]]
- output: LaTeX
A^B+C-D
, typeset $A^B+C-D$
- input: JSON
- Test 5
- input: JSON
["Multiplication",["Exponentiation",["NumberVariable","k"],["Subtraction",["Number","1"],["NumberVariable","y"]]],["Addition",["Number","2"],["NumberVariable","k"]]]
- output: LaTeX
k^{1-y}\times {2+k}
, typeset $k^{1-y}\times {2+k}$
- input: JSON
can parse relations of numeric expressions from JSON to LaTeX
- Test 1
- input: JSON
["GreaterThan",["Number","1"],["Number","2"]]
- output: LaTeX
1>2
, typeset $1>2$
- input: JSON
- Test 2
- input: JSON
["LessThan",["Subtraction",["Number","1"],["Number","2"]],["Addition",["Number","1"],["Number","2"]]]
- output: LaTeX
1-2<1+2
, typeset $1-2<1+2$
- input: JSON
- Test 3
- input: JSON
["Conjunction",["GreaterThanOrEqual",["Number","2"],["Number","1"]],["LessThanOrEqual",["Number","2"],["Number","3"]]]
- output: LaTeX
2\ge 1\wedge 2\le 3
, typeset $2\ge 1\wedge 2\le 3$
- input: JSON
- Test 4
- input: JSON
["BinaryRelationHolds","Divides",["Number","7"],["Number","14"]]
- output: LaTeX
7 | 14
, typeset $7 | 14$
- input: JSON
- Test 5
- input: JSON
["BinaryRelationHolds","Divides",["NumberFunctionApplication",["FunctionVariable","A"],["NumberVariable","k"]],["Factorial",["NumberVariable","n"]]]
- output: LaTeX
A(k) | n!
, typeset $A(k) | n!$
- input: JSON
- Test 6
- input: JSON
["BinaryRelationHolds","GenericBinaryRelation",["Subtraction",["Number","1"],["NumberVariable","k"]],["Addition",["Number","1"],["NumberVariable","k"]]]
- output: LaTeX
1-k \sim 1+k
, typeset $1-k \sim 1+k$
- input: JSON
- Test 7
- input: JSON
["BinaryRelationHolds","ApproximatelyEqual",["Number","0.99"],["Number","1.01"]]
- output: LaTeX
0.99 \approx 1.01
, typeset $0.99 \approx 1.01$
- input: JSON
can represent inequality if JSON explicitly requests it
- Test 1
- input: JSON
["NotEqual",["Number","1"],["Number","2"]]
- output: LaTeX
1\ne 2
, typeset $1\ne 2$
- input: JSON
- Test 2
- input: JSON
["LogicalNegation",["Equals",["Number","1"],["Number","2"]]]
- output: LaTeX
\neg 1=2
, typeset $\neg 1=2$
- input: JSON
can convert propositional logic atomics from JSON to LaTeX
- Test 1
- input: JSON
"LogicalTrue"
- output: LaTeX
\top
, typeset $\top$
- input: JSON
- Test 2
- input: JSON
"LogicalFalse"
- output: LaTeX
\bot
, typeset $\bot$
- input: JSON
- Test 3
- input: JSON
"Contradiction"
- output: LaTeX
\rightarrow \leftarrow
, typeset $\rightarrow \leftarrow$
- input: JSON
can convert propositional logic conjuncts from JSON to LaTeX
- Test 1
- input: JSON
["Conjunction","LogicalTrue","LogicalFalse"]
- output: LaTeX
\top\wedge \bot
, typeset $\top\wedge \bot$
- input: JSON
- Test 2
- input: JSON
["Conjunction",["LogicalNegation",["LogicVariable","P"]],["LogicalNegation","LogicalTrue"]]
- output: LaTeX
\neg P\wedge \neg \top
, typeset $\neg P\wedge \neg \top$
- input: JSON
- Test 3
- input: JSON
["Conjunction",["Conjunction",["LogicVariable","a"],["LogicVariable","b"]],["LogicVariable","c"]]
- output: LaTeX
a\wedge b\wedge c
, typeset $a\wedge b\wedge c$
- input: JSON
can convert propositional logic disjuncts from JSON to LaTeX
- Test 1
- input: JSON
["Disjunction","LogicalTrue",["LogicalNegation",["LogicVariable","A"]]]
- output: LaTeX
\top\vee \neg A
, typeset $\top\vee \neg A$
- input: JSON
- Test 2
- input: JSON
["Disjunction",["Conjunction",["LogicVariable","P"],["LogicVariable","Q"]],["Conjunction",["LogicVariable","Q"],["LogicVariable","P"]]]
- output: LaTeX
P\wedge Q\vee Q\wedge P
, typeset $P\wedge Q\vee Q\wedge P$
- input: JSON
can convert propositional logic conditionals from JSON to LaTeX
- Test 1
- input: JSON
["Implication",["LogicVariable","A"],["Conjunction",["LogicVariable","Q"],["LogicalNegation",["LogicVariable","P"]]]]
- output: LaTeX
A\Rightarrow Q\wedge \neg P
, typeset $A\Rightarrow Q\wedge \neg P$
- input: JSON
- Test 2
- input: JSON
["Implication",["Implication",["Disjunction",["LogicVariable","P"],["LogicVariable","Q"]],["Conjunction",["LogicVariable","Q"],["LogicVariable","P"]]],["LogicVariable","T"]]
- output: LaTeX
P\vee Q\Rightarrow Q\wedge P\Rightarrow T
, typeset $P\vee Q\Rightarrow Q\wedge P\Rightarrow T$
- input: JSON
can convert propositional logic biconditionals from JSON to LaTeX
- Test 1
- input: JSON
["LogicalEquivalence",["LogicVariable","A"],["Conjunction",["LogicVariable","Q"],["LogicalNegation",["LogicVariable","P"]]]]
- output: LaTeX
A\Leftrightarrow Q\wedge \neg P
, typeset $A\Leftrightarrow Q\wedge \neg P$
- input: JSON
- Test 2
- input: JSON
["Implication",["LogicalEquivalence",["Disjunction",["LogicVariable","P"],["LogicVariable","Q"]],["Conjunction",["LogicVariable","Q"],["LogicVariable","P"]]],["LogicVariable","T"]]
- output: LaTeX
P\vee Q\Leftrightarrow Q\wedge P\Rightarrow T
, typeset $P\vee Q\Leftrightarrow Q\wedge P\Rightarrow T$
- input: JSON
can convert propositional expressions with groupers from JSON to LaTeX
- Test 1
- input: JSON
["Disjunction",["LogicVariable","P"],["Conjunction",["LogicalEquivalence",["LogicVariable","Q"],["LogicVariable","Q"]],["LogicVariable","P"]]]
- output: LaTeX
P\vee {Q\Leftrightarrow Q}\wedge P
, typeset $P\vee {Q\Leftrightarrow Q}\wedge P$
- input: JSON
- Test 2
- input: JSON
["LogicalNegation",["LogicalEquivalence","LogicalTrue","LogicalFalse"]]
- output: LaTeX
\neg {\top\Leftrightarrow \bot}
, typeset $\neg {\top\Leftrightarrow \bot}$
- input: JSON
can convert simple predicate logic expressions from JSON to LaTeX
- Test 1
- input: JSON
["UniversalQuantifier",["NumberVariable","x"],["LogicVariable","P"]]
- output: LaTeX
\forall x, P
, typeset $\forall x, P$
- input: JSON
- Test 2
- input: JSON
["ExistentialQuantifier",["NumberVariable","t"],["LogicalNegation",["LogicVariable","Q"]]]
- output: LaTeX
\exists t, \neg Q
, typeset $\exists t, \neg Q$
- input: JSON
- Test 3
- input: JSON
["UniqueExistentialQuantifier",["NumberVariable","k"],["Implication",["LogicVariable","m"],["LogicVariable","n"]]]
- output: LaTeX
\exists ! k, m\Rightarrow n
, typeset $\exists ! k, m\Rightarrow n$
- input: JSON
can convert finite and empty sets from JSON to LaTeX
- Test 1
- input: JSON
"EmptySet"
- output: LaTeX
\emptyset
, typeset $\emptyset$
- input: JSON
- Test 2
- input: JSON
["FiniteSet",["OneElementSequence",["Number","1"]]]
- output: LaTeX
\{1\}
, typeset ${1}$
- input: JSON
- Test 3
- input: JSON
["FiniteSet",["ElementThenSequence",["Number","1"],["OneElementSequence",["Number","2"]]]]
- output: LaTeX
\{1,2\}
, typeset ${1,2}$
- input: JSON
- Test 4
- input: JSON
["FiniteSet",["ElementThenSequence",["Number","1"],["ElementThenSequence",["Number","2"],["OneElementSequence",["Number","3"]]]]]
- output: LaTeX
\{1,2,3\}
, typeset ${1,2,3}$
- input: JSON
- Test 5
- input: JSON
["FiniteSet",["ElementThenSequence","EmptySet",["OneElementSequence","EmptySet"]]]
- output: LaTeX
\{\emptyset,\emptyset\}
, typeset ${\emptyset,\emptyset}$
- input: JSON
- Test 6
- input: JSON
["FiniteSet",["OneElementSequence",["FiniteSet",["OneElementSequence","EmptySet"]]]]
- output: LaTeX
\{\{\emptyset\}\}
, typeset ${{\emptyset}}$
- input: JSON
- Test 7
- input: JSON
["FiniteSet",["ElementThenSequence",["Number","3"],["OneElementSequence",["NumberVariable","x"]]]]
- output: LaTeX
\{3,x\}
, typeset ${3,x}$
- input: JSON
- Test 8
- input: JSON
["FiniteSet",["ElementThenSequence",["SetUnion",["SetVariable","A"],["SetVariable","B"]],["OneElementSequence",["SetIntersection",["SetVariable","A"],["SetVariable","B"]]]]]
- output: LaTeX
\{A\cup B,A\cap B\}
, typeset ${A\cup B,A\cap B}$
- input: JSON
- Test 9
- input: JSON
["FiniteSet",["ElementThenSequence",["Number","1"],["ElementThenSequence",["Number","2"],["ElementThenSequence","EmptySet",["ElementThenSequence",["NumberVariable","K"],["OneElementSequence",["NumberVariable","P"]]]]]]]
- output: LaTeX
\{1,2,\emptyset,K,P\}
, typeset ${1,2,\emptyset,K,P}$
- input: JSON
can convert tuples and vectors from JSON to LaTeX
- Test 1
- input: JSON
["Tuple",["ElementThenSequence",["Number","5"],["OneElementSequence",["Number","6"]]]]
- output: LaTeX
(5,6)
, typeset $(5,6)$
- input: JSON
- Test 2
- input: JSON
["Tuple",["ElementThenSequence",["Number","5"],["ElementThenSequence",["SetUnion",["SetVariable","A"],["SetVariable","B"]],["OneElementSequence",["NumberVariable","k"]]]]]
- output: LaTeX
(5,A\cup B,k)
, typeset $(5,A\cup B,k)$
- input: JSON
- Test 3
- input: JSON
["Vector",["NumberThenSequence",["Number","5"],["OneNumberSequence",["Number","6"]]]]
- output: LaTeX
\langle 5,6\rangle
, typeset $\langle 5,6\rangle$
- input: JSON
- Test 4
- input: JSON
["Vector",["NumberThenSequence",["Number","5"],["NumberThenSequence",["NumberNegation",["Number","7"]],["OneNumberSequence",["NumberVariable","k"]]]]]
- output: LaTeX
\langle 5,-7,k\rangle
, typeset $\langle 5,-7,k\rangle$
- input: JSON
- Test 5
- input: JSON
["Tuple",["ElementThenSequence",["Tuple",["ElementThenSequence",["Number","1"],["OneElementSequence",["Number","2"]]]],["OneElementSequence",["Number","6"]]]]
- output: LaTeX
((1,2),6)
, typeset $((1,2),6)$
- input: JSON
can convert simple set memberships and subsets to LaTeX
- Test 1
- input: JSON
["NounIsElement",["NumberVariable","b"],["SetVariable","B"]]
- output: LaTeX
b\in B
, typeset $b\in B$
- input: JSON
- Test 2
- input: JSON
["NounIsElement",["Number","2"],["FiniteSet",["ElementThenSequence",["Number","1"],["OneElementSequence",["Number","2"]]]]]
- output: LaTeX
2\in \{1,2\}
, typeset $2\in {1,2}$
- input: JSON
- Test 3
- input: JSON
["NounIsElement",["NumberVariable","X"],["SetUnion",["SetVariable","a"],["SetVariable","b"]]]
- output: LaTeX
X\in a\cup b
, typeset $X\in a\cup b$
- input: JSON
- Test 4
- input: JSON
["NounIsElement",["SetUnion",["SetVariable","A"],["SetVariable","B"]],["SetUnion",["SetVariable","X"],["SetVariable","Y"]]]
- output: LaTeX
A\cup B\in X\cup Y
, typeset $A\cup B\in X\cup Y$
- input: JSON
- Test 5
- input: JSON
["Subset",["SetVariable","A"],["SetComplement",["SetVariable","B"]]]
- output: LaTeX
A\subset \bar B
, typeset $A\subset \bar B$
- input: JSON
- Test 6
- input: JSON
["SubsetOrEqual",["SetIntersection",["SetVariable","u"],["SetVariable","v"]],["SetUnion",["SetVariable","u"],["SetVariable","v"]]]
- output: LaTeX
u\cap v\subseteq u\cup v
, typeset $u\cap v\subseteq u\cup v$
- input: JSON
- Test 7
- input: JSON
["SubsetOrEqual",["FiniteSet",["OneElementSequence",["Number","1"]]],["SetUnion",["FiniteSet",["OneElementSequence",["Number","1"]]],["FiniteSet",["OneElementSequence",["Number","2"]]]]]
- output: LaTeX
\{1\}\subseteq \{1\}\cup \{2\}
, typeset ${1}\subseteq {1}\cup {2}$
- input: JSON
- Test 8
- input: JSON
["NounIsElement",["NumberVariable","p"],["SetCartesianProduct",["SetVariable","U"],["SetVariable","V"]]]
- output: LaTeX
p\in U\times V
, typeset $p\in U\times V$
- input: JSON
- Test 9
- input: JSON
["NounIsElement",["NumberVariable","q"],["SetUnion",["SetComplement",["SetVariable","U"]],["SetCartesianProduct",["SetVariable","V"],["SetVariable","W"]]]]
- output: LaTeX
q\in \bar U\cup V\times W
, typeset $q\in \bar U\cup V\times W$
- input: JSON
- Test 10
- input: JSON
["NounIsElement",["Tuple",["ElementThenSequence",["NumberVariable","a"],["OneElementSequence",["NumberVariable","b"]]]],["SetCartesianProduct",["SetVariable","A"],["SetVariable","B"]]]
- output: LaTeX
(a,b)\in A\times B
, typeset $(a,b)\in A\times B$
- input: JSON
- Test 11
- input: JSON
["NounIsElement",["Vector",["NumberThenSequence",["NumberVariable","a"],["OneNumberSequence",["NumberVariable","b"]]]],["SetCartesianProduct",["SetVariable","A"],["SetVariable","B"]]]
- output: LaTeX
\langle a,b\rangle\in A\times B
, typeset $\langle a,b\rangle\in A\times B$
- input: JSON
can represent "notin" notation if JSON explicitly requests it
- Test 1
- input: JSON
["LogicalNegation",["NounIsElement",["NumberVariable","a"],["SetVariable","A"]]]
- output: LaTeX
\neg a\in A
, typeset $\neg a\in A$
- input: JSON
- Test 2
- input: JSON
["LogicalNegation",["NounIsElement","EmptySet","EmptySet"]]
- output: LaTeX
\neg \emptyset\in \emptyset
, typeset $\neg \emptyset\in \emptyset$
- input: JSON
- Test 3
- input: JSON
["LogicalNegation",["NounIsElement",["Subtraction",["Number","3"],["Number","5"]],["SetIntersection",["SetVariable","K"],["SetVariable","P"]]]]
- output: LaTeX
\neg 3-5\in K\cap P
, typeset $\neg 3-5\in K\cap P$
- input: JSON
- Test 4
- input: JSON
["NounIsNotElement",["NumberVariable","a"],["SetVariable","A"]]
- output: LaTeX
a\notin A
, typeset $a\notin A$
- input: JSON
- Test 5
- input: JSON
["NounIsNotElement","EmptySet","EmptySet"]
- output: LaTeX
\emptyset\notin \emptyset
, typeset $\emptyset\notin \emptyset$
- input: JSON
- Test 6
- input: JSON
["NounIsNotElement",["Subtraction",["Number","3"],["Number","5"]],["SetIntersection",["SetVariable","K"],["SetVariable","P"]]]
- output: LaTeX
3-5\notin K\cap P
, typeset $3-5\notin K\cap P$
- input: JSON
can convert to LaTeX sentences built from various relations
- Test 1
- input: JSON
["Disjunction",["LogicVariable","P"],["NounIsElement",["NumberVariable","b"],["SetVariable","B"]]]
- output: LaTeX
P\vee b\in B
, typeset $P\vee b\in B$
- input: JSON
- Test 2
- input: JSON
["PropositionIsElement",["Disjunction",["LogicVariable","P"],["LogicVariable","b"]],["SetVariable","B"]]
- output: LaTeX
{P\vee b}\in B
, typeset ${P\vee b}\in B$
- input: JSON
- Test 3
- input: JSON
["UniversalQuantifier",["NumberVariable","x"],["NounIsElement",["NumberVariable","x"],["SetVariable","X"]]]
- output: LaTeX
\forall x, x\in X
, typeset $\forall x, x\in X$
- input: JSON
- Test 4
- input: JSON
["Conjunction",["SubsetOrEqual",["SetVariable","A"],["SetVariable","B"]],["SubsetOrEqual",["SetVariable","B"],["SetVariable","A"]]]
- output: LaTeX
A\subseteq B\wedge B\subseteq A
, typeset $A\subseteq B\wedge B\subseteq A$
- input: JSON
- Test 5
- input: JSON
["Equals",["SetVariable","R"],["SetCartesianProduct",["SetVariable","A"],["SetVariable","B"]]]
- output: LaTeX
R=A\times B
, typeset $R=A\times B$
- input: JSON
- Test 6
- input: JSON
["UniversalQuantifier",["NumberVariable","n"],["BinaryRelationHolds","Divides",["NumberVariable","n"],["Factorial",["NumberVariable","n"]]]]
- output: LaTeX
\forall n, n | n!
, typeset $\forall n, n | n!$
- input: JSON
- Test 7
- input: JSON
["Implication",["BinaryRelationHolds","GenericBinaryRelation",["NumberVariable","a"],["NumberVariable","b"]],["BinaryRelationHolds","GenericBinaryRelation",["NumberVariable","b"],["NumberVariable","a"]]]
- output: LaTeX
a \sim b\Rightarrow b \sim a
, typeset $a \sim b\Rightarrow b \sim a$
- input: JSON
can create LaTeX notation related to functions
- Test 1
- input: JSON
["FunctionSignature",["FunctionVariable","f"],["SetVariable","A"],["SetVariable","B"]]
- output: LaTeX
f:A\to B
, typeset $f:A\to B$
- input: JSON
- Test 2
- input: JSON
["LogicalNegation",["FunctionSignature",["FunctionVariable","F"],["SetUnion",["SetVariable","X"],["SetVariable","Y"]],["SetVariable","Z"]]]
- output: LaTeX
\neg F:X\cup Y\to Z
, typeset $\neg F:X\cup Y\to Z$
- input: JSON
- Test 3
- input: JSON
["FunctionSignature",["FunctionComposition",["FunctionVariable","f"],["FunctionVariable","g"]],["SetVariable","A"],["SetVariable","C"]]
- output: LaTeX
f\circ g:A\to C
, typeset $f\circ g:A\to C$
- input: JSON
- Test 4
- input: JSON
["NumberFunctionApplication",["FunctionVariable","f"],["NumberVariable","x"]]
- output: LaTeX
f(x)
, typeset $f(x)$
- input: JSON
- Test 5
- input: JSON
["NumberFunctionApplication",["FunctionInverse",["FunctionVariable","f"]],["NumberFunctionApplication",["FunctionInverse",["FunctionVariable","g"]],["Number","10"]]]
- output: LaTeX
f ^ { - 1 }(g ^ { - 1 }(10))
, typeset $f ^ { - 1 }(g ^ { - 1 }(10))$
- input: JSON
- Test 6
- input: JSON
["NumberFunctionApplication",["FunctionVariable","E"],["SetComplement",["SetVariable","L"]]]
- output: LaTeX
E(\bar L)
, typeset $E(\bar L)$
- input: JSON
- Test 7
- input: JSON
["SetIntersection","EmptySet",["SetFunctionApplication",["FunctionVariable","f"],["Number","2"]]]
- output: LaTeX
\emptyset\cap f(2)
, typeset $\emptyset\cap f(2)$
- input: JSON
- Test 8
- input: JSON
["Conjunction",["PropositionFunctionApplication",["FunctionVariable","P"],["NumberVariable","e"]],["PropositionFunctionApplication",["FunctionVariable","Q"],["Addition",["Number","3"],["NumberVariable","b"]]]]
- output: LaTeX
P(e)\wedge Q(3+b)
, typeset $P(e)\wedge Q(3+b)$
- input: JSON
- Test 9
- input: JSON
["EqualFunctions",["FunctionVariable","F"],["FunctionComposition",["FunctionVariable","G"],["FunctionInverse",["FunctionVariable","H"]]]]
- output: LaTeX
F=G\circ H ^ { - 1 }
, typeset $F=G\circ H ^ { - 1 }$
- input: JSON
can represent trigonometric functions correctly
- Test 1
- input: JSON
["PrefixFunctionApplication","SineFunction",["NumberVariable","x"]]
- output: LaTeX
\sin x
, typeset $\sin x$
- input: JSON
- Test 2
- input: JSON
["PrefixFunctionApplication","CosineFunction",["Multiplication","Pi",["NumberVariable","x"]]]
- output: LaTeX
\cos \pi\times x
, typeset $\cos \pi\times x$
- input: JSON
- Test 3
- input: JSON
["PrefixFunctionApplication","TangentFunction",["NumberVariable","t"]]
- output: LaTeX
\tan t
, typeset $\tan t$
- input: JSON
- Test 4
- input: JSON
["Division",["Number","1"],["PrefixFunctionApplication","CotangentFunction","Pi"]]
- output: LaTeX
1\div \cot \pi
, typeset $1\div \cot \pi$
- input: JSON
- Test 5
- input: JSON
["Equals",["PrefixFunctionApplication","SecantFunction",["NumberVariable","y"]],["PrefixFunctionApplication","CosecantFunction",["NumberVariable","y"]]]
- output: LaTeX
\sec y=\csc y
, typeset $\sec y=\csc y$
- input: JSON
can express logarithms correctly
- Test 1
- input: JSON
["PrefixFunctionApplication","Logarithm",["NumberVariable","n"]]
- output: LaTeX
\log n
, typeset $\log n$
- input: JSON
- Test 2
- input: JSON
["Addition",["Number","1"],["PrefixFunctionApplication","NaturalLogarithm",["NumberVariable","x"]]]
- output: LaTeX
1+\ln x
, typeset $1+\ln x$
- input: JSON
- Test 3
- input: JSON
["PrefixFunctionApplication",["LogarithmWithBase",["Number","2"]],["Number","1024"]]
- output: LaTeX
\log_2 1024
, typeset $\log_2 1024$
- input: JSON
- Test 4
- input: JSON
["Division",["PrefixFunctionApplication","Logarithm",["NumberVariable","n"]],["PrefixFunctionApplication","Logarithm",["PrefixFunctionApplication","Logarithm",["NumberVariable","n"]]]]
- output: LaTeX
\log n\div \log \log n
, typeset $\log n\div \log \log n$
- input: JSON
can express equivalence classes and expressions that use them
- Test 1
- input: JSON
["EquivalenceClass",["Number","1"],"ApproximatelyEqual"]
- output: LaTeX
[1,\approx]
, typeset $[1,\approx]$
- input: JSON
- Test 2
- input: JSON
["EquivalenceClass",["Addition",["NumberVariable","x"],["Number","2"]],"GenericBinaryRelation"]
- output: LaTeX
[x+2,\sim]
, typeset $[x+2,\sim]$
- input: JSON
- Test 3
- input: JSON
["SetUnion",["EquivalenceClass",["Number","1"],"ApproximatelyEqual"],["EquivalenceClass",["Number","2"],"ApproximatelyEqual"]]
- output: LaTeX
[1,\approx]\cup [2,\approx]
, typeset $[1,\approx]\cup [2,\approx]$
- input: JSON
- Test 4
- input: JSON
["NounIsElement",["Number","7"],["EquivalenceClass",["Number","7"],"GenericBinaryRelation"]]
- output: LaTeX
7\in [7,\sim]
, typeset $7\in [7,\sim]$
- input: JSON
- Test 5
- input: JSON
["GenericEquivalenceClass",["NumberVariable","P"]]
- output: LaTeX
[P]
, typeset $[P]$
- input: JSON
can express equivalence and classes mod a number
- Test 1
- input: JSON
["EquivalentModulo",["Number","5"],["Number","11"],["Number","3"]]
- output: LaTeX
5 \equiv 11 \mod 3
, typeset $5 \equiv 11 \mod 3$
- input: JSON
- Test 2
- input: JSON
["EquivalentModulo",["NumberVariable","k"],["NumberVariable","m"],["NumberVariable","n"]]
- output: LaTeX
k \equiv m \mod n
, typeset $k \equiv m \mod n$
- input: JSON
- Test 3
- input: JSON
["Subset","EmptySet",["EquivalenceClassModulo",["NumberNegation",["Number","1"]],["Number","10"]]]
- output: LaTeX
\emptyset\subset [-1, \equiv _ 10]
, typeset $\emptyset\subset [-1, \equiv _ 10]$
- input: JSON
can construct type sentences and combinations of them
- Test 1
- input: JSON
["HasType",["NumberVariable","x"],"SetType"]
- output: LaTeX
x \text{is a set}
, typeset $x \text{is a set}$
- input: JSON
- Test 2
- input: JSON
["HasType",["NumberVariable","n"],"NumberType"]
- output: LaTeX
n \text{is a number}
, typeset $n \text{is a number}$
- input: JSON
- Test 3
- input: JSON
["HasType",["NumberVariable","S"],"PartialOrderType"]
- output: LaTeX
S \text{is a partial order}
, typeset $S \text{is a partial order}$
- input: JSON
- Test 4
- input: JSON
["Conjunction",["HasType",["Number","1"],"NumberType"],["HasType",["Number","10"],"NumberType"]]
- output: LaTeX
1 \text{is a number}\wedge 10 \text{is a number}
, typeset $1 \text{is a number}\wedge 10 \text{is a number}$
- input: JSON
- Test 5
- input: JSON
["Implication",["HasType",["NumberVariable","R"],"EquivalenceRelationType"],["HasType",["NumberVariable","R"],"RelationType"]]
- output: LaTeX
R \text{is an equivalence relation}\Rightarrow R \text{is a relation}
, typeset $R \text{is an equivalence relation}\Rightarrow R \text{is a relation}$
- input: JSON
can create notation for expression function application
- Test 1
- input: JSON
["NumberEFA",["FunctionVariable","f"],["NumberVariable","x"]]
- output: LaTeX
\mathcal{f} (x)
, typeset $\mathcal{f} (x)$
- input: JSON
- Test 2
- input: JSON
["NumberFunctionApplication",["FunctionVariable","F"],["NumberEFA",["FunctionVariable","k"],["Number","10"]]]
- output: LaTeX
F(\mathcal{k} (10))
, typeset $F(\mathcal{k} (10))$
- input: JSON
- Test 3
- input: JSON
["NumberEFA",["FunctionVariable","E"],["SetComplement",["SetVariable","L"]]]
- output: LaTeX
\mathcal{E} (\bar L)
, typeset $\mathcal{E} (\bar L)$
- input: JSON
- Test 4
- input: JSON
["SetIntersection","EmptySet",["SetEFA",["FunctionVariable","f"],["Number","2"]]]
- output: LaTeX
\emptyset\cap \mathcal{f} (2)
, typeset $\emptyset\cap \mathcal{f} (2)$
- input: JSON
- Test 5
- input: JSON
["Conjunction",["PropositionEFA",["FunctionVariable","P"],["NumberVariable","x"]],["PropositionEFA",["FunctionVariable","Q"],["NumberVariable","y"]]]
- output: LaTeX
\mathcal{P} (x)\wedge \mathcal{Q} (y)
, typeset $\mathcal{P} (x)\wedge \mathcal{Q} (y)$
- input: JSON
can create notation for assumptions
- Test 1
- input: JSON
["Given_Variant1",["LogicVariable","X"]]
- output: LaTeX
\text{Assume }X
, typeset $\text{Assume }X$
- input: JSON
- Test 2
- input: JSON
["Given_Variant2",["LogicVariable","X"]]
- output: LaTeX
\text{assume }X
, typeset $\text{assume }X$
- input: JSON
- Test 3
- input: JSON
["Given_Variant3",["LogicVariable","X"]]
- output: LaTeX
\text{Given }X
, typeset $\text{Given }X$
- input: JSON
- Test 4
- input: JSON
["Given_Variant4",["LogicVariable","X"]]
- output: LaTeX
\text{given }X
, typeset $\text{given }X$
- input: JSON
- Test 5
- input: JSON
["Given_Variant1",["Equals",["NumberVariable","k"],["Number","1000"]]]
- output: LaTeX
\text{Assume }k=1000
, typeset $\text{Assume }k=1000$
- input: JSON
- Test 6
- input: JSON
["Given_Variant2",["Equals",["NumberVariable","k"],["Number","1000"]]]
- output: LaTeX
\text{assume }k=1000
, typeset $\text{assume }k=1000$
- input: JSON
- Test 7
- input: JSON
["Given_Variant3",["Equals",["NumberVariable","k"],["Number","1000"]]]
- output: LaTeX
\text{Given }k=1000
, typeset $\text{Given }k=1000$
- input: JSON
- Test 8
- input: JSON
["Given_Variant4",["Equals",["NumberVariable","k"],["Number","1000"]]]
- output: LaTeX
\text{given }k=1000
, typeset $\text{given }k=1000$
- input: JSON
- Test 9
- input: JSON
["Given_Variant1","LogicalTrue"]
- output: LaTeX
\text{Assume }\top
, typeset $\text{Assume }\top$
- input: JSON
- Test 10
- input: JSON
["Given_Variant2","LogicalTrue"]
- output: LaTeX
\text{assume }\top
, typeset $\text{assume }\top$
- input: JSON
- Test 11
- input: JSON
["Given_Variant3","LogicalTrue"]
- output: LaTeX
\text{Given }\top
, typeset $\text{Given }\top$
- input: JSON
- Test 12
- input: JSON
["Given_Variant4","LogicalTrue"]
- output: LaTeX
\text{given }\top
, typeset $\text{given }\top$
- input: JSON
can create notation for Let-style declarations
- Test 1
- input: JSON
["Let_Variant1",["NumberVariable","x"]]
- output: LaTeX
\text{Let }x
, typeset $\text{Let }x$
- input: JSON
- Test 2
- input: JSON
["Let_Variant2",["NumberVariable","x"]]
- output: LaTeX
\text{let }x
, typeset $\text{let }x$
- input: JSON
- Test 3
- input: JSON
["Let_Variant1",["NumberVariable","T"]]
- output: LaTeX
\text{Let }T
, typeset $\text{Let }T$
- input: JSON
- Test 4
- input: JSON
["Let_Variant2",["NumberVariable","T"]]
- output: LaTeX
\text{let }T
, typeset $\text{let }T$
- input: JSON
- Test 5
- input: JSON
["LetBeSuchThat_Variant1",["NumberVariable","x"],["GreaterThan",["NumberVariable","x"],["Number","0"]]]
- output: LaTeX
\text{Let }x \text{ be such that }x>0
, typeset $\text{Let }x \text{ be such that }x>0$
- input: JSON
- Test 6
- input: JSON
["LetBeSuchThat_Variant2",["NumberVariable","x"],["GreaterThan",["NumberVariable","x"],["Number","0"]]]
- output: LaTeX
\text{let }x \text{ be such that }x>0
, typeset $\text{let }x \text{ be such that }x>0$
- input: JSON
- Test 7
- input: JSON
["LetBeSuchThat_Variant1",["NumberVariable","T"],["Disjunction",["Equals",["NumberVariable","T"],["Number","5"]],["NounIsElement",["NumberVariable","T"],["SetVariable","S"]]]]
- output: LaTeX
\text{Let }T \text{ be such that }T=5\vee T\in S
, typeset $\text{Let }T \text{ be such that }T=5\vee T\in S$
- input: JSON
- Test 8
- input: JSON
["LetBeSuchThat_Variant2",["NumberVariable","T"],["Disjunction",["Equals",["NumberVariable","T"],["Number","5"]],["NounIsElement",["NumberVariable","T"],["SetVariable","S"]]]]
- output: LaTeX
\text{let }T \text{ be such that }T=5\vee T\in S
, typeset $\text{let }T \text{ be such that }T=5\vee T\in S$
- input: JSON
can parse notation for For Some-style declarations
- Test 1
- input: JSON
["ForSome_Variant1",["NumberVariable","x"],["GreaterThan",["NumberVariable","x"],["Number","0"]]]
- output: LaTeX
\text{For some }x, x>0
, typeset $\text{For some }x, x>0$
- input: JSON
- Test 2
- input: JSON
["ForSome_Variant2",["NumberVariable","x"],["GreaterThan",["NumberVariable","x"],["Number","0"]]]
- output: LaTeX
\text{for some }x, x>0
, typeset $\text{for some }x, x>0$
- input: JSON
- Test 3
- input: JSON
["ForSome_Variant3",["NumberVariable","x"],["GreaterThan",["NumberVariable","x"],["Number","0"]]]
- output: LaTeX
x>0 \text{ for some } x
, typeset $x>0 \text{ for some } x$
- input: JSON
- Test 4
- input: JSON
["ForSome_Variant4",["NumberVariable","x"],["GreaterThan",["NumberVariable","x"],["Number","0"]]]
- output: LaTeX
x>0~\text{for some}~x
, typeset $x>0~\text{for some}~x$
- input: JSON
- Test 5
- input: JSON
["ForSome_Variant1",["NumberVariable","T"],["Disjunction",["Equals",["NumberVariable","T"],["Number","5"]],["NounIsElement",["NumberVariable","T"],["SetVariable","S"]]]]
- output: LaTeX
\text{For some }T, T=5\vee T\in S
, typeset $\text{For some }T, T=5\vee T\in S$
- input: JSON
- Test 6
- input: JSON
["ForSome_Variant2",["NumberVariable","T"],["Disjunction",["Equals",["NumberVariable","T"],["Number","5"]],["NounIsElement",["NumberVariable","T"],["SetVariable","S"]]]]
- output: LaTeX
\text{for some }T, T=5\vee T\in S
, typeset $\text{for some }T, T=5\vee T\in S$
- input: JSON
- Test 7
- input: JSON
["ForSome_Variant3",["NumberVariable","T"],["Disjunction",["Equals",["NumberVariable","T"],["Number","5"]],["NounIsElement",["NumberVariable","T"],["SetVariable","S"]]]]
- output: LaTeX
T=5\vee T\in S \text{ for some } T
, typeset $T=5\vee T\in S \text{ for some } T$
- input: JSON
- Test 8
- input: JSON
["ForSome_Variant4",["NumberVariable","T"],["Disjunction",["Equals",["NumberVariable","T"],["Number","5"]],["NounIsElement",["NumberVariable","T"],["SetVariable","S"]]]]
- output: LaTeX
T=5\vee T\in S~\text{for some}~T
, typeset $T=5\vee T\in S~\text{for some}~T$
- input: JSON
Converting putdown to LaTeX
correctly converts many kinds of numbers but not malformed ones
- Test 1
- input: putdown
0
- output: LaTeX
0
, typeset $0$
- input: putdown
- Test 2
- input: putdown
328975289
- output: LaTeX
328975289
, typeset $328975289$
- input: putdown
- Test 3
- input: putdown
(- 9097285323)
- output: LaTeX
-9097285323
, typeset $-9097285323$
- input: putdown
- Test 4
- input: putdown
0.0
- output: LaTeX
0.0
, typeset $0.0$
- input: putdown
- Test 5
- input: putdown
32897.5289
- output: LaTeX
32897.5289
, typeset $32897.5289$
- input: putdown
- Test 6
- input: putdown
(- 1.9097285323)
- output: LaTeX
-1.9097285323
, typeset $-1.9097285323$
- input: putdown
- Test 7
- input: putdown
0.0.0
- output: LaTeX
null
, typeset $undefined$
- input: putdown
- Test 8
- input: putdown
0k0
- output: LaTeX
null
, typeset $undefined$
- input: putdown
correctly converts one-letter variable names but not larger ones
- Test 1
- input: putdown
x
- output: LaTeX
x
, typeset $x$
- input: putdown
- Test 2
- input: putdown
U
- output: LaTeX
U
, typeset $U$
- input: putdown
- Test 3
- input: putdown
Q
- output: LaTeX
Q
, typeset $Q$
- input: putdown
- Test 4
- input: putdown
m
- output: LaTeX
m
, typeset $m$
- input: putdown
- Test 5
- input: putdown
foo
- output: LaTeX
null
, typeset $undefined$
- input: putdown
- Test 6
- input: putdown
Hi
- output: LaTeX
null
, typeset $undefined$
- input: putdown
correctly converts numeric constants
- Test 1
- input: putdown
infinity
- output: LaTeX
\infty
, typeset $\infty$
- input: putdown
- Test 2
- input: putdown
pi
- output: LaTeX
\pi
, typeset $\pi$
- input: putdown
- Test 3
- input: putdown
eulersnumber
- output: LaTeX
e
, typeset $e$
- input: putdown
correctly converts exponentiation of atomics
- Test 1
- input: putdown
(^ 1 2)
- output: LaTeX
1^2
, typeset $1^2$
- input: putdown
- Test 2
- input: putdown
(^ e x)
- output: LaTeX
e^x
, typeset $e^x$
- input: putdown
- Test 3
- input: putdown
(^ 1 infinity)
- output: LaTeX
1^\infty
, typeset $1^\infty$
- input: putdown
correctly converts atomic percentages and factorials
- Test 1
- input: putdown
(% 10)
- output: LaTeX
10\%
, typeset $10\%$
- input: putdown
- Test 2
- input: putdown
(% t)
- output: LaTeX
t\%
, typeset $t\%$
- input: putdown
- Test 3
- input: putdown
(! 10)
- output: LaTeX
10!
, typeset $10!$
- input: putdown
- Test 4
- input: putdown
(! t)
- output: LaTeX
t!
, typeset $t!$
- input: putdown
correctly converts division of atomics or factors
- Test 1
- input: putdown
(/ 1 2)
- output: LaTeX
1\div 2
, typeset $1\div 2$
- input: putdown
- Test 2
- input: putdown
(/ x y)
- output: LaTeX
x\div y
, typeset $x\div y$
- input: putdown
- Test 3
- input: putdown
(/ 0 infinity)
- output: LaTeX
0\div \infty
, typeset $0\div \infty$
- input: putdown
- Test 4
- input: putdown
(/ (^ x 2) 3)
- output: LaTeX
x^2\div 3
, typeset $x^2\div 3$
- input: putdown
- Test 5
- input: putdown
(/ 1 (^ e x))
- output: LaTeX
1\div e^x
, typeset $1\div e^x$
- input: putdown
- Test 6
- input: putdown
(/ (% 10) (^ 2 100))
- output: LaTeX
10\%\div 2^100
, typeset $10\%\div 2^100$
- input: putdown
correctly converts multiplication of atomics or factors
- Test 1
- input: putdown
(* 1 2)
- output: LaTeX
1\times 2
, typeset $1\times 2$
- input: putdown
- Test 2
- input: putdown
(* x y)
- output: LaTeX
x\times y
, typeset $x\times y$
- input: putdown
- Test 3
- input: putdown
(* 0 infinity)
- output: LaTeX
0\times \infty
, typeset $0\times \infty$
- input: putdown
- Test 4
- input: putdown
(* (^ x 2) 3)
- output: LaTeX
x^2\times 3
, typeset $x^2\times 3$
- input: putdown
- Test 5
- input: putdown
(* 1 (^ e x))
- output: LaTeX
1\times e^x
, typeset $1\times e^x$
- input: putdown
- Test 6
- input: putdown
(* (% 10) (^ 2 100))
- output: LaTeX
10\%\times 2^100
, typeset $10\%\times 2^100$
- input: putdown
correctly converts negations of atomics or factors
- Test 1
- input: putdown
(* (- 1) 2)
- output: LaTeX
-1\times 2
, typeset $-1\times 2$
- input: putdown
- Test 2
- input: putdown
(* x (- y))
- output: LaTeX
x\times -y
, typeset $x\times -y$
- input: putdown
- Test 3
- input: putdown
(* (- (^ x 2)) (- 3))
- output: LaTeX
-x^2\times -3
, typeset $-x^2\times -3$
- input: putdown
- Test 4
- input: putdown
(- (- (- (- 1000))))
- output: LaTeX
----1000
, typeset $----1000$
- input: putdown
correctly converts additions and subtractions
- Test 1
- input: putdown
(+ x y)
- output: LaTeX
x+y
, typeset $x+y$
- input: putdown
- Test 2
- input: putdown
(- 1 (- 3))
- output: LaTeX
1--3
, typeset $1--3$
- input: putdown
- Test 3
- input: putdown
(+ (^ A B) (- C pi))
- output: LaTeX
A^B+C-\pi
, typeset $A^B+C-\pi$
- input: putdown
correctly converts number expressions with groupers
- Test 1
- input: putdown
(- (* 1 2))
- output: LaTeX
-1\times 2
, typeset $-1\times 2$
- input: putdown
- Test 2
- input: putdown
(! (^ x 2))
- output: LaTeX
{x^2}!
, typeset ${x^2}!$
- input: putdown
- Test 3
- input: putdown
(^ (- x) (* 2 (- 3)))
- output: LaTeX
{-x}^{2\times -3}
, typeset ${-x}^{2\times -3}$
- input: putdown
- Test 4
- input: putdown
(^ (- 3) (+ 1 2))
- output: LaTeX
{-3}^{1+2}
, typeset ${-3}^{1+2}$
- input: putdown
can convert relations of numeric expressions
- Test 1
- input: putdown
(> 1 2)
- output: LaTeX
1>2
, typeset $1>2$
- input: putdown
- Test 2
- input: putdown
(< (- 1 2) (+ 1 2))
- output: LaTeX
1-2<1+2
, typeset $1-2<1+2$
- input: putdown
- Test 3
- input: putdown
(not (= 1 2))
- output: LaTeX
\neg 1=2
, typeset $\neg 1=2$
- input: putdown
- Test 4
- input: putdown
(and (>= 2 1) (<= 2 3))
- output: LaTeX
2\ge 1\wedge 2\le 3
, typeset $2\ge 1\wedge 2\le 3$
- input: putdown
- Test 5
- input: putdown
(relationholds | 7 14)
- output: LaTeX
7 | 14
, typeset $7 | 14$
- input: putdown
- Test 6
- input: putdown
(relationholds | (apply A k) (! n))
- output: LaTeX
A(k) | n!
, typeset $A(k) | n!$
- input: putdown
- Test 7
- input: putdown
(relationholds ~ (- 1 k) (+ 1 k))
- output: LaTeX
1-k \sim 1+k
, typeset $1-k \sim 1+k$
- input: putdown
- Test 8
- input: putdown
(relationholds ~~ 0.99 1.01)
- output: LaTeX
0.99 \approx 1.01
, typeset $0.99 \approx 1.01$
- input: putdown
does not undo the canonical form for inequality
- Test 1
- input: putdown
(not (= x y))
- output: LaTeX
\neg x=y
, typeset $\neg x=y$
- input: putdown
correctly converts propositional logic atomics
- Test 1
- input: putdown
true
- output: LaTeX
\top
, typeset $\top$
- input: putdown
- Test 2
- input: putdown
false
- output: LaTeX
\bot
, typeset $\bot$
- input: putdown
- Test 3
- input: putdown
contradiction
- output: LaTeX
\rightarrow \leftarrow
, typeset $\rightarrow \leftarrow$
- input: putdown
correctly converts propositional logic conjuncts
- Test 1
- input: putdown
(and true false)
- output: LaTeX
\top\wedge \bot
, typeset $\top\wedge \bot$
- input: putdown
- Test 2
- input: putdown
(and (not P) (not true))
- output: LaTeX
\neg P\wedge \neg \top
, typeset $\neg P\wedge \neg \top$
- input: putdown
- Test 3
- input: putdown
(and (and a b) c)
- output: LaTeX
a\wedge b\wedge c
, typeset $a\wedge b\wedge c$
- input: putdown
correctly converts propositional logic disjuncts
- Test 1
- input: putdown
(or true (not A))
- output: LaTeX
\top\vee \neg A
, typeset $\top\vee \neg A$
- input: putdown
- Test 2
- input: putdown
(or (and P Q) (and Q P))
- output: LaTeX
P\wedge Q\vee Q\wedge P
, typeset $P\wedge Q\vee Q\wedge P$
- input: putdown
correctly converts propositional logic conditionals
- Test 1
- input: putdown
(implies A (and Q (not P)))
- output: LaTeX
A\Rightarrow Q\wedge \neg P
, typeset $A\Rightarrow Q\wedge \neg P$
- input: putdown
- Test 2
- input: putdown
(implies (implies (or P Q) (and Q P)) T)
- output: LaTeX
P\vee Q\Rightarrow Q\wedge P\Rightarrow T
, typeset $P\vee Q\Rightarrow Q\wedge P\Rightarrow T$
- input: putdown
correctly converts propositional logic biconditionals
- Test 1
- input: putdown
(iff A (and Q (not P)))
- output: LaTeX
A\Leftrightarrow Q\wedge \neg P
, typeset $A\Leftrightarrow Q\wedge \neg P$
- input: putdown
- Test 2
- input: putdown
(implies (iff (or P Q) (and Q P)) T)
- output: LaTeX
P\vee Q\Leftrightarrow Q\wedge P\Rightarrow T
, typeset $P\vee Q\Leftrightarrow Q\wedge P\Rightarrow T$
- input: putdown
correctly converts propositional expressions with groupers
- Test 1
- input: putdown
(or P (and (iff Q Q) P))
- output: LaTeX
P\vee {Q\Leftrightarrow Q}\wedge P
, typeset $P\vee {Q\Leftrightarrow Q}\wedge P$
- input: putdown
- Test 2
- input: putdown
(not (iff true false))
- output: LaTeX
\neg {\top\Leftrightarrow \bot}
, typeset $\neg {\top\Leftrightarrow \bot}$
- input: putdown
correctly converts simple predicate logic expressions
- Test 1
- input: putdown
(forall (x , P))
- output: LaTeX
\forall x, P
, typeset $\forall x, P$
- input: putdown
- Test 2
- input: putdown
(exists (t , (not Q)))
- output: LaTeX
\exists t, \neg Q
, typeset $\exists t, \neg Q$
- input: putdown
- Test 3
- input: putdown
(exists! (k , (implies m n)))
- output: LaTeX
\exists ! k, m\Rightarrow n
, typeset $\exists ! k, m\Rightarrow n$
- input: putdown
can convert finite and empty sets
- Test 1
- input: putdown
emptyset
- output: LaTeX
\emptyset
, typeset $\emptyset$
- input: putdown
- Test 2
- input: putdown
(finiteset (elts 1))
- output: LaTeX
\{1\}
, typeset ${1}$
- input: putdown
- Test 3
- input: putdown
(finiteset (elts 1 (elts 2)))
- output: LaTeX
\{1,2\}
, typeset ${1,2}$
- input: putdown
- Test 4
- input: putdown
(finiteset (elts 1 (elts 2 (elts 3))))
- output: LaTeX
\{1,2,3\}
, typeset ${1,2,3}$
- input: putdown
- Test 5
- input: putdown
(finiteset (elts emptyset (elts emptyset)))
- output: LaTeX
\{\emptyset,\emptyset\}
, typeset ${\emptyset,\emptyset}$
- input: putdown
- Test 6
- input: putdown
(finiteset (elts (finiteset (elts emptyset))))
- output: LaTeX
\{\{\emptyset\}\}
, typeset ${{\emptyset}}$
- input: putdown
- Test 7
- input: putdown
(finiteset (elts 3 (elts x)))
- output: LaTeX
\{3,x\}
, typeset ${3,x}$
- input: putdown
- Test 8
- input: putdown
(finiteset (elts (union A B) (elts (intersection A B))))
- output: LaTeX
\{A\cup B,A\cap B\}
, typeset ${A\cup B,A\cap B}$
- input: putdown
- Test 9
- input: putdown
(finiteset (elts 1 (elts 2 (elts emptyset (elts K (elts P))))))
- output: LaTeX
\{1,2,\emptyset,K,P\}
, typeset ${1,2,\emptyset,K,P}$
- input: putdown
correctly converts tuples and vectors
- Test 1
- input: putdown
(tuple (elts 5 (elts 6)))
- output: LaTeX
(5,6)
, typeset $(5,6)$
- input: putdown
- Test 2
- input: putdown
(tuple (elts 5 (elts (union A B) (elts k))))
- output: LaTeX
(5,A\cup B,k)
, typeset $(5,A\cup B,k)$
- input: putdown
- Test 3
- input: putdown
(vector (elts 5 (elts 6)))
- output: LaTeX
\langle 5,6\rangle
, typeset $\langle 5,6\rangle$
- input: putdown
- Test 4
- input: putdown
(vector (elts 5 (elts (- 7) (elts k))))
- output: LaTeX
\langle 5,-7,k\rangle
, typeset $\langle 5,-7,k\rangle$
- input: putdown
- Test 5
- input: putdown
(tuple)
- output: LaTeX
null
, typeset $undefined$
- input: putdown
- Test 6
- input: putdown
(tuple (elts))
- output: LaTeX
null
, typeset $undefined$
- input: putdown
- Test 7
- input: putdown
(tuple (elts 3))
- output: LaTeX
null
, typeset $undefined$
- input: putdown
- Test 8
- input: putdown
(vector)
- output: LaTeX
null
, typeset $undefined$
- input: putdown
- Test 9
- input: putdown
(vector (elts))
- output: LaTeX
null
, typeset $undefined$
- input: putdown
- Test 10
- input: putdown
(vector (elts 3))
- output: LaTeX
null
, typeset $undefined$
- input: putdown
- Test 11
- input: putdown
(tuple (elts (tuple (elts 1 (elts 2))) (elts 6)))
- output: LaTeX
((1,2),6)
, typeset $((1,2),6)$
- input: putdown
- Test 12
- input: putdown
(vector (elts (tuple (elts 1 (elts 2))) (elts 6)))
- output: LaTeX
null
, typeset $undefined$
- input: putdown
- Test 13
- input: putdown
(vector (elts (vector (elts 1 (elts 2))) (elts 6)))
- output: LaTeX
null
, typeset $undefined$
- input: putdown
- Test 14
- input: putdown
(vector (elts (union A B) (elts 6)))
- output: LaTeX
null
, typeset $undefined$
- input: putdown
can convert simple set memberships and subsets
- Test 1
- input: putdown
(in b B)
- output: LaTeX
b\in B
, typeset $b\in B$
- input: putdown
- Test 2
- input: putdown
(in 2 (finiteset (elts 1 (elts 2))))
- output: LaTeX
2\in \{1,2\}
, typeset $2\in {1,2}$
- input: putdown
- Test 3
- input: putdown
(in X (union a b))
- output: LaTeX
X\in a\cup b
, typeset $X\in a\cup b$
- input: putdown
- Test 4
- input: putdown
(in (union A B) (union X Y))
- output: LaTeX
A\cup B\in X\cup Y
, typeset $A\cup B\in X\cup Y$
- input: putdown
- Test 5
- input: putdown
(subset A (complement B))
- output: LaTeX
A\subset \bar B
, typeset $A\subset \bar B$
- input: putdown
- Test 6
- input: putdown
(subseteq (intersection u v) (union u v))
- output: LaTeX
u\cap v\subseteq u\cup v
, typeset $u\cap v\subseteq u\cup v$
- input: putdown
- Test 7
- input: putdown
(subseteq (finiteset (elts 1)) (union (finiteset (elts 1)) (finiteset (elts 2))))
- output: LaTeX
\{1\}\subseteq \{1\}\cup \{2\}
, typeset ${1}\subseteq {1}\cup {2}$
- input: putdown
- Test 8
- input: putdown
(in p (cartesianproduct U V))
- output: LaTeX
p\in U\times V
, typeset $p\in U\times V$
- input: putdown
- Test 9
- input: putdown
(in q (union (complement U) (cartesianproduct V W)))
- output: LaTeX
q\in \bar U\cup V\times W
, typeset $q\in \bar U\cup V\times W$
- input: putdown
- Test 10
- input: putdown
(in (tuple (elts a (elts b))) (cartesianproduct A B))
- output: LaTeX
(a,b)\in A\times B
, typeset $(a,b)\in A\times B$
- input: putdown
- Test 11
- input: putdown
(in (vector (elts a (elts b))) (cartesianproduct A B))
- output: LaTeX
\langle a,b\rangle\in A\times B
, typeset $\langle a,b\rangle\in A\times B$
- input: putdown
does not undo the canonical form for "notin" notation
- Test 1
- input: putdown
(not (in a A))
- output: LaTeX
\neg a\in A
, typeset $\neg a\in A$
- input: putdown
- Test 2
- input: putdown
(not (in emptyset emptyset))
- output: LaTeX
\neg \emptyset\in \emptyset
, typeset $\neg \emptyset\in \emptyset$
- input: putdown
- Test 3
- input: putdown
(not (in (- 3 5) (intersection K P)))
- output: LaTeX
\neg 3-5\in K\cap P
, typeset $\neg 3-5\in K\cap P$
- input: putdown
can convert sentences built from set operators
- Test 1
- input: putdown
(or P (in b B))
- output: LaTeX
P\vee b\in B
, typeset $P\vee b\in B$
- input: putdown
- Test 2
- input: putdown
(in (or P b) B)
- output: LaTeX
{P\vee b}\in B
, typeset ${P\vee b}\in B$
- input: putdown
- Test 3
- input: putdown
(forall (x , (in x X)))
- output: LaTeX
\forall x, x\in X
, typeset $\forall x, x\in X$
- input: putdown
- Test 4
- input: putdown
(and (subseteq A B) (subseteq B A))
- output: LaTeX
A\subseteq B\wedge B\subseteq A
, typeset $A\subseteq B\wedge B\subseteq A$
- input: putdown
- Test 5
- input: putdown
(= R (cartesianproduct A B))
- output: LaTeX
R=A\times B
, typeset $R=A\times B$
- input: putdown
- Test 6
- input: putdown
(forall (n , (relationholds | n (! n))))
- output: LaTeX
\forall n, n | n!
, typeset $\forall n, n | n!$
- input: putdown
- Test 7
- input: putdown
(implies (relationholds ~ a b) (relationholds ~ b a))
- output: LaTeX
a \sim b\Rightarrow b \sim a
, typeset $a \sim b\Rightarrow b \sim a$
- input: putdown
can convert notation related to functions
- Test 1
- input: putdown
(function f A B)
- output: LaTeX
f:A\to B
, typeset $f:A\to B$
- input: putdown
- Test 2
- input: putdown
(not (function F (union X Y) Z))
- output: LaTeX
\neg F:X\cup Y\to Z
, typeset $\neg F:X\cup Y\to Z$
- input: putdown
- Test 3
- input: putdown
(function (compose f g) A C)
- output: LaTeX
f\circ g:A\to C
, typeset $f\circ g:A\to C$
- input: putdown
- Test 4
- input: putdown
(apply f x)
- output: LaTeX
f(x)
, typeset $f(x)$
- input: putdown
- Test 5
- input: putdown
(apply (inverse f) (apply (inverse g) 10))
- output: LaTeX
f ^ { - 1 }(g ^ { - 1 }(10))
, typeset $f ^ { - 1 }(g ^ { - 1 }(10))$
- input: putdown
- Test 6
- input: putdown
(apply E (complement L))
- output: LaTeX
E(\bar L)
, typeset $E(\bar L)$
- input: putdown
- Test 7
- input: putdown
(intersection emptyset (apply f 2))
- output: LaTeX
\emptyset\cap f(2)
, typeset $\emptyset\cap f(2)$
- input: putdown
- Test 8
- input: putdown
(and (apply P e) (apply Q (+ 3 b)))
- output: LaTeX
P(e)\wedge Q(3+b)
, typeset $P(e)\wedge Q(3+b)$
- input: putdown
- Test 9
- input: putdown
(= F (compose G (inverse H)))
- output: LaTeX
F=G\circ H ^ { - 1 }
, typeset $F=G\circ H ^ { - 1 }$
- input: putdown
can convert expressions with trigonometric functions
- Test 1
- input: putdown
(apply sin x)
- output: LaTeX
\sin x
, typeset $\sin x$
- input: putdown
- Test 2
- input: putdown
(apply cos (* pi x))
- output: LaTeX
\cos \pi\times x
, typeset $\cos \pi\times x$
- input: putdown
- Test 3
- input: putdown
(apply tan t)
- output: LaTeX
\tan t
, typeset $\tan t$
- input: putdown
- Test 4
- input: putdown
(/ 1 (apply cot pi))
- output: LaTeX
1\div \cot \pi
, typeset $1\div \cot \pi$
- input: putdown
- Test 5
- input: putdown
(= (apply sec y) (apply csc y))
- output: LaTeX
\sec y=\csc y
, typeset $\sec y=\csc y$
- input: putdown
can convert expressions with logarithms
- Test 1
- input: putdown
(apply log n)
- output: LaTeX
\log n
, typeset $\log n$
- input: putdown
- Test 2
- input: putdown
(+ 1 (apply ln x))
- output: LaTeX
1+\ln x
, typeset $1+\ln x$
- input: putdown
- Test 3
- input: putdown
(apply (logbase 2) 1024)
- output: LaTeX
\log_2 1024
, typeset $\log_2 1024$
- input: putdown
- Test 4
- input: putdown
(/ (apply log n) (apply log (apply log n)))
- output: LaTeX
\log n\div \log \log n
, typeset $\log n\div \log \log n$
- input: putdown
can convert equivalence classes and expressions that use them
- Test 1
- input: putdown
(equivclass 1 ~~)
- output: LaTeX
[1,\approx]
, typeset $[1,\approx]$
- input: putdown
- Test 2
- input: putdown
(union (equivclass 1 ~~) (equivclass 2 ~~))
- output: LaTeX
[1,\approx]\cup [2,\approx]
, typeset $[1,\approx]\cup [2,\approx]$
- input: putdown
can convert equivalence and classes mod a number
- Test 1
- input: putdown
(=mod 5 11 3)
- output: LaTeX
5 \equiv 11 \mod 3
, typeset $5 \equiv 11 \mod 3$
- input: putdown
- Test 2
- input: putdown
(=mod k m n)
- output: LaTeX
k \equiv m \mod n
, typeset $k \equiv m \mod n$
- input: putdown
- Test 3
- input: putdown
(subset emptyset (modclass (- 1) 10))
- output: LaTeX
\emptyset\subset [-1, \equiv _ 10]
, typeset $\emptyset\subset [-1, \equiv _ 10]$
- input: putdown
can convert type sentences and combinations of them
- Test 1
- input: putdown
(hastype x settype)
- output: LaTeX
x \text{is a set}
, typeset $x \text{is a set}$
- input: putdown
- Test 2
- input: putdown
(hastype n numbertype)
- output: LaTeX
n \text{is a number}
, typeset $n \text{is a number}$
- input: putdown
- Test 3
- input: putdown
(hastype S partialordertype)
- output: LaTeX
S \text{is a partial order}
, typeset $S \text{is a partial order}$
- input: putdown
- Test 4
- input: putdown
(and (hastype 1 numbertype) (hastype 10 numbertype))
- output: LaTeX
1 \text{is a number}\wedge 10 \text{is a number}
, typeset $1 \text{is a number}\wedge 10 \text{is a number}$
- input: putdown
- Test 5
- input: putdown
(implies (hastype R equivalencerelationtype) (hastype R relationtype))
- output: LaTeX
R \text{is an equivalence relation}\Rightarrow R \text{is a relation}
, typeset $R \text{is an equivalence relation}\Rightarrow R \text{is a relation}$
- input: putdown
can convert notation for expression function application
- Test 1
- input: putdown
(efa f x)
- output: LaTeX
\mathcal{f} (x)
, typeset $\mathcal{f} (x)$
- input: putdown
- Test 2
- input: putdown
(apply F (efa k 10))
- output: LaTeX
F(\mathcal{k} (10))
, typeset $F(\mathcal{k} (10))$
- input: putdown
- Test 3
- input: putdown
(efa E (complement L))
- output: LaTeX
\mathcal{E} (\bar L)
, typeset $\mathcal{E} (\bar L)$
- input: putdown
- Test 4
- input: putdown
(intersection emptyset (efa f 2))
- output: LaTeX
\emptyset\cap \mathcal{f} (2)
, typeset $\emptyset\cap \mathcal{f} (2)$
- input: putdown
- Test 5
- input: putdown
(and (efa P x) (efa Q y))
- output: LaTeX
\mathcal{P} (x)\wedge \mathcal{Q} (y)
, typeset $\mathcal{P} (x)\wedge \mathcal{Q} (y)$
- input: putdown
can convert notation for assumptions
- Test 1
- input: putdown
:X
- output: LaTeX
\text{Assume }X
, typeset $\text{Assume }X$
- input: putdown
- Test 2
- input: putdown
:(= k 1000)
- output: LaTeX
\text{Assume }k=1000
, typeset $\text{Assume }k=1000$
- input: putdown
- Test 3
- input: putdown
:true
- output: LaTeX
\text{Assume }\top
, typeset $\text{Assume }\top$
- input: putdown
- Test 4
- input: putdown
:50
- output: LaTeX
null
, typeset $undefined$
- input: putdown
- Test 5
- input: putdown
:(tuple (elts 5 (elts 6)))
- output: LaTeX
null
, typeset $undefined$
- input: putdown
- Test 6
- input: putdown
:(compose f g)
- output: LaTeX
null
, typeset $undefined$
- input: putdown
- Test 7
- input: putdown
:emptyset
- output: LaTeX
null
, typeset $undefined$
- input: putdown
- Test 8
- input: putdown
:infinity
- output: LaTeX
null
, typeset $undefined$
- input: putdown
can convert notation for Let-style declarations
- Test 1
- input: putdown
:[x]
- output: LaTeX
\text{Let }x
, typeset $\text{Let }x$
- input: putdown
- Test 2
- input: putdown
:[T]
- output: LaTeX
\text{Let }T
, typeset $\text{Let }T$
- input: putdown
- Test 3
- input: putdown
:[x , (> x 0)]
- output: LaTeX
\text{Let }x \text{ be such that }x>0
, typeset $\text{Let }x \text{ be such that }x>0$
- input: putdown
- Test 4
- input: putdown
:[T , (or (= T 5) (in T S))]
- output: LaTeX
\text{Let }T \text{ be such that }T=5\vee T\in S
, typeset $\text{Let }T \text{ be such that }T=5\vee T\in S$
- input: putdown
- Test 5
- input: putdown
:[(> x 5)]
- output: LaTeX
null
, typeset $undefined$
- input: putdown
- Test 6
- input: putdown
:[(= 1 1)]
- output: LaTeX
null
, typeset $undefined$
- input: putdown
- Test 7
- input: putdown
:[emptyset]
- output: LaTeX
null
, typeset $undefined$
- input: putdown
- Test 8
- input: putdown
:[x , 1]
- output: LaTeX
null
, typeset $undefined$
- input: putdown
- Test 9
- input: putdown
:[x , (or 1 2)]
- output: LaTeX
null
, typeset $undefined$
- input: putdown
- Test 10
- input: putdown
:[x , [y]]
- output: LaTeX
null
, typeset $undefined$
- input: putdown
- Test 11
- input: putdown
:[x , :B]
- output: LaTeX
null
, typeset $undefined$
- input: putdown
can convert notation for For Some-style declarations
- Test 1
- input: putdown
[x , (> x 0)]
- output: LaTeX
\text{For some }x, x>0
, typeset $\text{For some }x, x>0$
- input: putdown
- Test 2
- input: putdown
[T , (or (= T 5) (in T S))]
- output: LaTeX
\text{For some }T, T=5\vee T\in S
, typeset $\text{For some }T, T=5\vee T\in S$
- input: putdown
- Test 3
- input: putdown
[x]
- output: LaTeX
null
, typeset $undefined$
- input: putdown
- Test 4
- input: putdown
[T]
- output: LaTeX
null
, typeset $undefined$
- input: putdown
- Test 5
- input: putdown
[(> x 5)]
- output: LaTeX
null
, typeset $undefined$
- input: putdown
- Test 6
- input: putdown
[(= 1 1)]
- output: LaTeX
null
, typeset $undefined$
- input: putdown
- Test 7
- input: putdown
[emptyset]
- output: LaTeX
null
, typeset $undefined$
- input: putdown
- Test 8
- input: putdown
[x , 1]
- output: LaTeX
null
, typeset $undefined$
- input: putdown
- Test 9
- input: putdown
[x , (or 1 2)]
- output: LaTeX
null
, typeset $undefined$
- input: putdown
- Test 10
- input: putdown
[x , [y]]
- output: LaTeX
null
, typeset $undefined$
- input: putdown
- Test 11
- input: putdown
[x , :B]
- output: LaTeX
null
, typeset $undefined$
- input: putdown
Converting LaTeX to putdown
correctly converts many kinds of numbers but not malformed ones
- Test 1
- input: LaTeX
0
, typeset $0$ - output: putdown
0
- input: LaTeX
- Test 2
- input: LaTeX
328975289
, typeset $328975289$ - output: putdown
328975289
- input: LaTeX
- Test 3
- input: LaTeX
-9097285323
, typeset $-9097285323$ - output: putdown
(- 9097285323)
- input: LaTeX
- Test 4
- input: LaTeX
0.0
, typeset $0.0$ - output: putdown
0.0
- input: LaTeX
- Test 5
- input: LaTeX
32897.5289
, typeset $32897.5289$ - output: putdown
32897.5289
- input: LaTeX
- Test 6
- input: LaTeX
-1.9097285323
, typeset $-1.9097285323$ - output: putdown
(- 1.9097285323)
- input: LaTeX
- Test 7
- input: LaTeX
0.0.0
, typeset $0.0.0$ - output: putdown
null
- input: LaTeX
- Test 8
- input: LaTeX
0k0
, typeset $0k0$ - output: putdown
null
- input: LaTeX
correctly converts one-letter variable names but not larger ones
- Test 1
- input: LaTeX
x
, typeset $x$ - output: putdown
x
- input: LaTeX
- Test 2
- input: LaTeX
U
, typeset $U$ - output: putdown
U
- input: LaTeX
- Test 3
- input: LaTeX
Q
, typeset $Q$ - output: putdown
Q
- input: LaTeX
- Test 4
- input: LaTeX
m
, typeset $m$ - output: putdown
m
- input: LaTeX
- Test 5
- input: LaTeX
foo
, typeset $foo$ - output: putdown
null
- input: LaTeX
- Test 6
- input: LaTeX
Hi
, typeset $Hi$ - output: putdown
null
- input: LaTeX
correctly converts numeric constants
- Test 1
- input: LaTeX
\infty
, typeset $\infty$ - output: putdown
infinity
- input: LaTeX
- Test 2
- input: LaTeX
\pi
, typeset $\pi$ - output: putdown
pi
- input: LaTeX
correctly converts exponentiation of atomics
- Test 1
- input: LaTeX
1^2
, typeset $1^2$ - output: putdown
(^ 1 2)
- input: LaTeX
- Test 2
- input: LaTeX
e^x
, typeset $e^x$ - output: putdown
(^ eulersnumber x)
- input: LaTeX
- Test 3
- input: LaTeX
1^\infty
, typeset $1^\infty$ - output: putdown
(^ 1 infinity)
- input: LaTeX
correctly converts atomic percentages
- Test 1
- input: LaTeX
10\%
, typeset $10\%$ - output: putdown
(% 10)
- input: LaTeX
- Test 2
- input: LaTeX
t\%
, typeset $t\%$ - output: putdown
(% t)
- input: LaTeX
- Test 3
- input: LaTeX
10!
, typeset $10!$ - output: putdown
(! 10)
- input: LaTeX
- Test 4
- input: LaTeX
t!
, typeset $t!$ - output: putdown
(! t)
- input: LaTeX
correctly converts division of atomics or factors
- Test 1
- input: LaTeX
1\div2
, typeset $1\div2$ - output: putdown
(/ 1 2)
- input: LaTeX
- Test 2
- input: LaTeX
x\div y
, typeset $x\div y$ - output: putdown
(/ x y)
- input: LaTeX
- Test 3
- input: LaTeX
0\div\infty
, typeset $0\div\infty$ - output: putdown
(/ 0 infinity)
- input: LaTeX
- Test 4
- input: LaTeX
x^2\div3
, typeset $x^2\div3$ - output: putdown
(/ (^ x 2) 3)
- input: LaTeX
- Test 5
- input: LaTeX
1\div e^x
, typeset $1\div e^x$ - output: putdown
(/ 1 (^ eulersnumber x))
- input: LaTeX
- Test 6
- input: LaTeX
10\%\div2^{100}
, typeset $10\%\div2^{100}$ - output: putdown
(/ (% 10) (^ 2 100))
- input: LaTeX
correctly converts multiplication of atomics or factors
- Test 1
- input: LaTeX
1\times2
, typeset $1\times2$ - output: putdown
(* 1 2)
- input: LaTeX
- Test 2
- input: LaTeX
x\cdot y
, typeset $x\cdot y$ - output: putdown
(* x y)
- input: LaTeX
- Test 3
- input: LaTeX
0\times\infty
, typeset $0\times\infty$ - output: putdown
(* 0 infinity)
- input: LaTeX
- Test 4
- input: LaTeX
x^2\cdot3
, typeset $x^2\cdot3$ - output: putdown
(* (^ x 2) 3)
- input: LaTeX
- Test 5
- input: LaTeX
1\times e^x
, typeset $1\times e^x$ - output: putdown
(* 1 (^ eulersnumber x))
- input: LaTeX
- Test 6
- input: LaTeX
10\%\cdot2^{100}
, typeset $10\%\cdot2^{100}$ - output: putdown
(* (% 10) (^ 2 100))
- input: LaTeX
correctly converts negations of atomics or factors
- Test 1
- input: LaTeX
-1\times2
, typeset $-1\times2$ - output: putdown
(* (- 1) 2)
- input: LaTeX
- Test 2
- input: LaTeX
x\cdot{-y}
, typeset $x\cdot{-y}$ - output: putdown
(* x (- y))
- input: LaTeX
- Test 3
- input: LaTeX
x\cdot(-y)
, typeset $x\cdot(-y)$ - output: putdown
(* x (- y))
- input: LaTeX
- Test 4
- input: LaTeX
{-x^2}\cdot{-3}
, typeset ${-x^2}\cdot{-3}$ - output: putdown
(* (- (^ x 2)) (- 3))
- input: LaTeX
- Test 5
- input: LaTeX
(-x^2)\cdot(-3)
, typeset $(-x^2)\cdot(-3)$ - output: putdown
(* (- (^ x 2)) (- 3))
- input: LaTeX
- Test 6
- input: LaTeX
----1000
, typeset $----1000$ - output: putdown
(- (- (- (- 1000))))
- input: LaTeX
correctly converts additions and subtractions
- Test 1
- input: LaTeX
x + y
, typeset $x + y$ - output: putdown
(+ x y)
- input: LaTeX
- Test 2
- input: LaTeX
1 - - 3
, typeset $1 - - 3$ - output: putdown
(- 1 (- 3))
- input: LaTeX
correctly converts number expressions with groupers
- Test 1
- input: LaTeX
-{1\times2}
, typeset $-{1\times2}$ - output: putdown
(- (* 1 2))
- input: LaTeX
- Test 2
- input: LaTeX
-(1\times2)
, typeset $-(1\times2)$ - output: putdown
(- (* 1 2))
- input: LaTeX
- Test 3
- input: LaTeX
{x^2}!
, typeset ${x^2}!$ - output: putdown
(! (^ x 2))
- input: LaTeX
- Test 4
- input: LaTeX
(N-1)!
, typeset $(N-1)!$ - output: putdown
(! (- N 1))
- input: LaTeX
- Test 5
- input: LaTeX
\left(N-1\right)!
, typeset $\left(N-1\right)!$ - output: putdown
(! (- N 1))
- input: LaTeX
- Test 6
- input: LaTeX
\left(N-1)!
, typeset $\left(N-1)!$ - output: putdown
null
- input: LaTeX
- Test 7
- input: LaTeX
(N-1\right)!
, typeset $(N-1\right)!$ - output: putdown
null
- input: LaTeX
- Test 8
- input: LaTeX
3!\cdot4!
, typeset $3!\cdot4!$ - output: putdown
(* (! 3) (! 4))
- input: LaTeX
- Test 9
- input: LaTeX
{-x}^{2\cdot{-3}}
, typeset ${-x}^{2\cdot{-3}}$ - output: putdown
(^ (- x) (* 2 (- 3)))
- input: LaTeX
- Test 10
- input: LaTeX
(-x)^(2\cdot(-3))
, typeset $(-x)^(2\cdot(-3))$ - output: putdown
(^ (- x) (* 2 (- 3)))
- input: LaTeX
- Test 11
- input: LaTeX
(-x)^{2\cdot(-3)}
, typeset $(-x)^{2\cdot(-3)}$ - output: putdown
(^ (- x) (* 2 (- 3)))
- input: LaTeX
- Test 12
- input: LaTeX
{-3}^{1+2}
, typeset ${-3}^{1+2}$ - output: putdown
(^ (- 3) (+ 1 2))
- input: LaTeX
- Test 13
- input: LaTeX
k^{1-y}\cdot(2+k)
, typeset $k^{1-y}\cdot(2+k)$ - output: putdown
(* (^ k (- 1 y)) (+ 2 k))
- input: LaTeX
- Test 14
- input: LaTeX
0.99\approx1.01
, typeset $0.99\approx1.01$ - output: putdown
(relationholds ~~ 0.99 1.01)
- input: LaTeX
can convert relations of numeric expressions
- Test 1
- input: LaTeX
1 > 2
, typeset $1 > 2$ - output: putdown
(> 1 2)
- input: LaTeX
- Test 2
- input: LaTeX
1 \gt 2
, typeset $1 \gt 2$ - output: putdown
(> 1 2)
- input: LaTeX
- Test 3
- input: LaTeX
1 - 2 < 1 + 2
, typeset $1 - 2 < 1 + 2$ - output: putdown
(< (- 1 2) (+ 1 2))
- input: LaTeX
- Test 4
- input: LaTeX
1 - 2 \lt 1 + 2
, typeset $1 - 2 \lt 1 + 2$ - output: putdown
(< (- 1 2) (+ 1 2))
- input: LaTeX
- Test 5
- input: LaTeX
\neg 1 = 2
, typeset $\neg 1 = 2$ - output: putdown
(not (= 1 2))
- input: LaTeX
- Test 6
- input: LaTeX
2 \ge 1 \wedge 2 \le 3
, typeset $2 \ge 1 \wedge 2 \le 3$ - output: putdown
(and (>= 2 1) (<= 2 3))
- input: LaTeX
- Test 7
- input: LaTeX
2\geq1\wedge2\leq3
, typeset $2\geq1\wedge2\leq3$ - output: putdown
(and (>= 2 1) (<= 2 3))
- input: LaTeX
- Test 8
- input: LaTeX
7 | 14
, typeset $7 | 14$ - output: putdown
(relationholds | 7 14)
- input: LaTeX
- Test 9
- input: LaTeX
7 \vert 14
, typeset $7 \vert 14$ - output: putdown
(relationholds | 7 14)
- input: LaTeX
- Test 10
- input: LaTeX
A ( k ) | n !
, typeset $A ( k ) | n !$ - output: putdown
(relationholds | (apply A k) (! n))
- input: LaTeX
- Test 11
- input: LaTeX
A ( k )\vert n !
, typeset $A ( k )\vert n !$ - output: putdown
(relationholds | (apply A k) (! n))
- input: LaTeX
- Test 12
- input: LaTeX
1 - k \sim 1 + k
, typeset $1 - k \sim 1 + k$ - output: putdown
(relationholds ~ (- 1 k) (+ 1 k))
- input: LaTeX
creates the canonical form for inequality
- Test 1
- input: LaTeX
x \ne y
, typeset $x \ne y$ - output: putdown
(not (= x y))
- input: LaTeX
- Test 2
- input: LaTeX
x \neq y
, typeset $x \neq y$ - output: putdown
(not (= x y))
- input: LaTeX
- Test 3
- input: LaTeX
\neg x = y
, typeset $\neg x = y$ - output: putdown
(not (= x y))
- input: LaTeX
correctly converts propositional logic atomics
- Test 1
- input: LaTeX
\top
, typeset $\top$ - output: putdown
true
- input: LaTeX
- Test 2
- input: LaTeX
\bot
, typeset $\bot$ - output: putdown
false
- input: LaTeX
- Test 3
- input: LaTeX
\rightarrow\leftarrow
, typeset $\rightarrow\leftarrow$ - output: putdown
contradiction
- input: LaTeX
correctly converts propositional logic conjuncts
- Test 1
- input: LaTeX
\top\wedge\bot
, typeset $\top\wedge\bot$ - output: putdown
(and true false)
- input: LaTeX
- Test 2
- input: LaTeX
\neg P\wedge\neg\top
, typeset $\neg P\wedge\neg\top$ - output: putdown
(and (not P) (not true))
- input: LaTeX
correctly converts propositional logic disjuncts
- Test 1
- input: LaTeX
\top\vee \neg A
, typeset $\top\vee \neg A$ - output: putdown
(or true (not A))
- input: LaTeX
- Test 2
- input: LaTeX
P\wedge Q\vee Q\wedge P
, typeset $P\wedge Q\vee Q\wedge P$ - output: putdown
(or (and P Q) (and Q P))
- input: LaTeX
correctly converts propositional logic conditionals
- Test 1
- input: LaTeX
A\Rightarrow Q\wedge\neg P
, typeset $A\Rightarrow Q\wedge\neg P$ - output: putdown
(implies A (and Q (not P)))
- input: LaTeX
- Test 2
- input: LaTeX
P\vee Q\Rightarrow Q\wedge P\Rightarrow T
, typeset $P\vee Q\Rightarrow Q\wedge P\Rightarrow T$ - output: putdown
(implies (or P Q) (implies (and Q P) T))
- input: LaTeX
correctly converts propositional logic biconditionals
- Test 1
- input: LaTeX
A\Leftrightarrow Q\wedge\neg P
, typeset $A\Leftrightarrow Q\wedge\neg P$ - output: putdown
(iff A (and Q (not P)))
- input: LaTeX
correctly converts propositional expressions with groupers
- Test 1
- input: LaTeX
P\lor {Q\Leftrightarrow Q}\land P
, typeset $P\lor {Q\Leftrightarrow Q}\land P$ - output: putdown
(or P (and (iff Q Q) P))
- input: LaTeX
- Test 2
- input: LaTeX
\lnot{\top\Leftrightarrow\bot}
, typeset $\lnot{\top\Leftrightarrow\bot}$ - output: putdown
(not (iff true false))
- input: LaTeX
- Test 3
- input: LaTeX
\lnot\left(\top\Leftrightarrow\bot\right)
, typeset $\lnot\left(\top\Leftrightarrow\bot\right)$ - output: putdown
(not (iff true false))
- input: LaTeX
- Test 4
- input: LaTeX
\lnot(\top\Leftrightarrow\bot)
, typeset $\lnot(\top\Leftrightarrow\bot)$ - output: putdown
(not (iff true false))
- input: LaTeX
correctly converts simple predicate logic expressions
- Test 1
- input: LaTeX
\forall x, P
, typeset $\forall x, P$ - output: putdown
(forall (x , P))
- input: LaTeX
- Test 2
- input: LaTeX
\exists t,\neg Q
, typeset $\exists t,\neg Q$ - output: putdown
(exists (t , (not Q)))
- input: LaTeX
- Test 3
- input: LaTeX
\exists! k,m\Rightarrow n
, typeset $\exists! k,m\Rightarrow n$ - output: putdown
(exists! (k , (implies m n)))
- input: LaTeX
can convert finite and empty sets
- Test 1
- input: LaTeX
\emptyset
, typeset $\emptyset$ - output: putdown
emptyset
- input: LaTeX
- Test 2
- input: LaTeX
\{ 1 \}
, typeset ${ 1 }$ - output: putdown
(finiteset (elts 1))
- input: LaTeX
- Test 3
- input: LaTeX
\left\{ 1 \right\}
, typeset $\left{ 1 \right}$ - output: putdown
(finiteset (elts 1))
- input: LaTeX
- Test 4
- input: LaTeX
\{ 1 , 2 \}
, typeset ${ 1 , 2 }$ - output: putdown
(finiteset (elts 1 (elts 2)))
- input: LaTeX
- Test 5
- input: LaTeX
\{ 1 , 2 , 3 \}
, typeset ${ 1 , 2 , 3 }$ - output: putdown
(finiteset (elts 1 (elts 2 (elts 3))))
- input: LaTeX
- Test 6
- input: LaTeX
\{ \emptyset , \emptyset \}
, typeset ${ \emptyset , \emptyset }$ - output: putdown
(finiteset (elts emptyset (elts emptyset)))
- input: LaTeX
- Test 7
- input: LaTeX
\{ \{ \emptyset \} \}
, typeset ${ { \emptyset } }$ - output: putdown
(finiteset (elts (finiteset (elts emptyset))))
- input: LaTeX
- Test 8
- input: LaTeX
\{ 3 , x \}
, typeset ${ 3 , x }$ - output: putdown
(finiteset (elts 3 (elts x)))
- input: LaTeX
- Test 9
- input: LaTeX
\left\{ 3 , x \right\}
, typeset $\left{ 3 , x \right}$ - output: putdown
(finiteset (elts 3 (elts x)))
- input: LaTeX
- Test 10
- input: LaTeX
\{ A \cup B , A \cap B \}
, typeset ${ A \cup B , A \cap B }$ - output: putdown
(finiteset (elts (union A B) (elts (intersection A B))))
- input: LaTeX
- Test 11
- input: LaTeX
\{ 1 , 2 , \emptyset , K , P \}
, typeset ${ 1 , 2 , \emptyset , K , P }$ - output: putdown
(finiteset (elts 1 (elts 2 (elts emptyset (elts K (elts P))))))
- input: LaTeX
correctly converts tuples and vectors
- Test 1
- input: LaTeX
( 5 , 6 )
, typeset $( 5 , 6 )$ - output: putdown
(tuple (elts 5 (elts 6)))
- input: LaTeX
- Test 2
- input: LaTeX
( 5 , A \cup B , k )
, typeset $( 5 , A \cup B , k )$ - output: putdown
(tuple (elts 5 (elts (union A B) (elts k))))
- input: LaTeX
- Test 3
- input: LaTeX
\langle 5 , 6 \rangle
, typeset $\langle 5 , 6 \rangle$ - output: putdown
(vector (elts 5 (elts 6)))
- input: LaTeX
- Test 4
- input: LaTeX
\langle 5 , - 7 , k \rangle
, typeset $\langle 5 , - 7 , k \rangle$ - output: putdown
(vector (elts 5 (elts (- 7) (elts k))))
- input: LaTeX
- Test 5
- input: LaTeX
()
, typeset $()$ - output: putdown
null
- input: LaTeX
- Test 6
- input: LaTeX
(())
, typeset $(())$ - output: putdown
null
- input: LaTeX
- Test 7
- input: LaTeX
(3)
, typeset $(3)$ - output: putdown
3
- input: LaTeX
- Test 8
- input: LaTeX
\langle\rangle
, typeset $\langle\rangle$ - output: putdown
null
- input: LaTeX
- Test 9
- input: LaTeX
\langle3\rangle
, typeset $\langle3\rangle$ - output: putdown
null
- input: LaTeX
- Test 10
- input: LaTeX
( ( 1 , 2 ) , 6 )
, typeset $( ( 1 , 2 ) , 6 )$ - output: putdown
(tuple (elts (tuple (elts 1 (elts 2))) (elts 6)))
- input: LaTeX
- Test 11
- input: LaTeX
\langle(1,2),6\rangle
, typeset $\langle(1,2),6\rangle$ - output: putdown
null
- input: LaTeX
- Test 12
- input: LaTeX
\langle\langle1,2\rangle,6\rangle
, typeset $\langle\langle1,2\rangle,6\rangle$ - output: putdown
null
- input: LaTeX
- Test 13
- input: LaTeX
\langle A\cup B,6\rangle
, typeset $\langle A\cup B,6\rangle$ - output: putdown
null
- input: LaTeX
can convert simple set memberships and subsets
- Test 1
- input: LaTeX
b \in B
, typeset $b \in B$ - output: putdown
(in b B)
- input: LaTeX
- Test 2
- input: LaTeX
2 \in \{ 1 , 2 \}
, typeset $2 \in { 1 , 2 }$ - output: putdown
(in 2 (finiteset (elts 1 (elts 2))))
- input: LaTeX
- Test 3
- input: LaTeX
X \in a \cup b
, typeset $X \in a \cup b$ - output: putdown
(in X (union a b))
- input: LaTeX
- Test 4
- input: LaTeX
A \cup B \in X \cup Y
, typeset $A \cup B \in X \cup Y$ - output: putdown
(in (union A B) (union X Y))
- input: LaTeX
- Test 5
- input: LaTeX
A \subset \bar B
, typeset $A \subset \bar B$ - output: putdown
(subset A (complement B))
- input: LaTeX
- Test 6
- input: LaTeX
u \cap v \subseteq u \cup v
, typeset $u \cap v \subseteq u \cup v$ - output: putdown
(subseteq (intersection u v) (union u v))
- input: LaTeX
- Test 7
- input: LaTeX
\{1\}\subseteq\{1\}\cup\{2\}
, typeset ${1}\subseteq{1}\cup{2}$ - output: putdown
(subseteq (finiteset (elts 1)) (union (finiteset (elts 1)) (finiteset (elts 2))))
- input: LaTeX
- Test 8
- input: LaTeX
p \in U \times V
, typeset $p \in U \times V$ - output: putdown
(in p (cartesianproduct U V))
- input: LaTeX
- Test 9
- input: LaTeX
q \in \bar U \cup V \times W
, typeset $q \in \bar U \cup V \times W$ - output: putdown
(in q (union (complement U) (cartesianproduct V W)))
- input: LaTeX
- Test 10
- input: LaTeX
( a , b ) \in A \times B
, typeset $( a , b ) \in A \times B$ - output: putdown
(in (tuple (elts a (elts b))) (cartesianproduct A B))
- input: LaTeX
- Test 11
- input: LaTeX
\langle a , b \rangle \in A \times B
, typeset $\langle a , b \rangle \in A \times B$ - output: putdown
(in (vector (elts a (elts b))) (cartesianproduct A B))
- input: LaTeX
expands "notin" notation into canonical form
- Test 1
- input: LaTeX
a\notin A
, typeset $a\notin A$ - output: putdown
(not (in a A))
- input: LaTeX
- Test 2
- input: LaTeX
\emptyset \notin \emptyset
, typeset $\emptyset \notin \emptyset$ - output: putdown
(not (in emptyset emptyset))
- input: LaTeX
- Test 3
- input: LaTeX
3-5\notin K\cap P
, typeset $3-5\notin K\cap P$ - output: putdown
(not (in (- 3 5) (intersection K P)))
- input: LaTeX
can convert sentences built from set operators
- Test 1
- input: LaTeX
P \vee b \in B
, typeset $P \vee b \in B$ - output: putdown
(or P (in b B))
- input: LaTeX
- Test 2
- input: LaTeX
{P \vee b} \in B
, typeset ${P \vee b} \in B$ - output: putdown
(in (or P b) B)
- input: LaTeX
- Test 3
- input: LaTeX
\forall x , x \in X
, typeset $\forall x , x \in X$ - output: putdown
(forall (x , (in x X)))
- input: LaTeX
- Test 4
- input: LaTeX
A \subseteq B \wedge B \subseteq A
, typeset $A \subseteq B \wedge B \subseteq A$ - output: putdown
(and (subseteq A B) (subseteq B A))
- input: LaTeX
- Test 5
- input: LaTeX
R = A \times B
, typeset $R = A \times B$ - output: putdown
(= R (* A B))
- input: LaTeX
- Test 6
- input: LaTeX
R = A \cup B
, typeset $R = A \cup B$ - output: putdown
(= R (union A B))
- input: LaTeX
- Test 7
- input: LaTeX
\forall n , n | n !
, typeset $\forall n , n | n !$ - output: putdown
(forall (n , (relationholds | n (! n))))
- input: LaTeX
- Test 8
- input: LaTeX
a \sim b \Rightarrow b \sim a
, typeset $a \sim b \Rightarrow b \sim a$ - output: putdown
(implies (relationholds ~ a b) (relationholds ~ b a))
- input: LaTeX
can convert notation related to functions
- Test 1
- input: LaTeX
f:A\to B
, typeset $f:A\to B$ - output: putdown
(function f A B)
- input: LaTeX
- Test 2
- input: LaTeX
f\colon A\to B
, typeset $f\colon A\to B$ - output: putdown
(function f A B)
- input: LaTeX
- Test 3
- input: LaTeX
\neg F:X\cup Y\to Z
, typeset $\neg F:X\cup Y\to Z$ - output: putdown
(not (function F (union X Y) Z))
- input: LaTeX
- Test 4
- input: LaTeX
\neg F\colon X\cup Y\to Z
, typeset $\neg F\colon X\cup Y\to Z$ - output: putdown
(not (function F (union X Y) Z))
- input: LaTeX
- Test 5
- input: LaTeX
f \circ g : A \to C
, typeset $f \circ g : A \to C$ - output: putdown
(function (compose f g) A C)
- input: LaTeX
- Test 6
- input: LaTeX
f(x)
, typeset $f(x)$ - output: putdown
(apply f x)
- input: LaTeX
- Test 7
- input: LaTeX
f ^ {-1} ( g ^ {-1} ( 10 ) )
, typeset $f ^ {-1} ( g ^ {-1} ( 10 ) )$ - output: putdown
(apply (inverse f) (apply (inverse g) 10))
- input: LaTeX
- Test 8
- input: LaTeX
E(\bar L)
, typeset $E(\bar L)$ - output: putdown
(apply E (complement L))
- input: LaTeX
- Test 9
- input: LaTeX
\emptyset\cap f(2)
, typeset $\emptyset\cap f(2)$ - output: putdown
(intersection emptyset (apply f 2))
- input: LaTeX
- Test 10
- input: LaTeX
P(e)\wedge Q(3+b)
, typeset $P(e)\wedge Q(3+b)$ - output: putdown
(and (apply P eulersnumber) (apply Q (+ 3 b)))
- input: LaTeX
- Test 11
- input: LaTeX
F=G\circ H^{-1}
, typeset $F=G\circ H^{-1}$ - output: putdown
(= F (compose G (inverse H)))
- input: LaTeX
can convert expressions with trigonometric functions
- Test 1
- input: LaTeX
\sin x
, typeset $\sin x$ - output: putdown
(apply sin x)
- input: LaTeX
- Test 2
- input: LaTeX
\cos \pi \times x
, typeset $\cos \pi \times x$ - output: putdown
(apply cos (* pi x))
- input: LaTeX
- Test 3
- input: LaTeX
\tan t
, typeset $\tan t$ - output: putdown
(apply tan t)
- input: LaTeX
- Test 4
- input: LaTeX
1 \div \cot \pi
, typeset $1 \div \cot \pi$ - output: putdown
(/ 1 (apply cot pi))
- input: LaTeX
- Test 5
- input: LaTeX
\sec y = \csc y
, typeset $\sec y = \csc y$ - output: putdown
(= (apply sec y) (apply csc y))
- input: LaTeX
can convert expressions with logarithms
- Test 1
- input: LaTeX
\log n
, typeset $\log n$ - output: putdown
(apply log n)
- input: LaTeX
- Test 2
- input: LaTeX
1 + \ln x
, typeset $1 + \ln x$ - output: putdown
(+ 1 (apply ln x))
- input: LaTeX
- Test 3
- input: LaTeX
\log_ 2 1024
, typeset $\log_ 2 1024$ - output: putdown
(apply (logbase 2) 1024)
- input: LaTeX
- Test 4
- input: LaTeX
\log n \div \log \log n
, typeset $\log n \div \log \log n$ - output: putdown
(/ (apply log n) (apply log (apply log n)))
- input: LaTeX
can convert equivalence classes and expressions that use them
- Test 1
- input: LaTeX
[ 1 , \approx ]
, typeset $[ 1 , \approx ]$ - output: putdown
(equivclass 1 ~~)
- input: LaTeX
- Test 2
- input: LaTeX
\left[ 1 , \approx \right]
, typeset $\left[ 1 , \approx \right]$ - output: putdown
(equivclass 1 ~~)
- input: LaTeX
- Test 3
- input: LaTeX
\left[ 1 , \approx ]
, typeset $\left[ 1 , \approx ]$ - output: putdown
null
- input: LaTeX
- Test 4
- input: LaTeX
[ 1 , \approx \right]
, typeset $[ 1 , \approx \right]$ - output: putdown
null
- input: LaTeX
- Test 5
- input: LaTeX
[ x + 2 , \sim ]
, typeset $[ x + 2 , \sim ]$ - output: putdown
(equivclass (+ x 2) ~)
- input: LaTeX
- Test 6
- input: LaTeX
[ 1 , \approx ] \cup [ 2 , \approx ]
, typeset $[ 1 , \approx ] \cup [ 2 , \approx ]$ - output: putdown
(union (equivclass 1 ~~) (equivclass 2 ~~))
- input: LaTeX
- Test 7
- input: LaTeX
7 \in [ 7 , \sim ]
, typeset $7 \in [ 7 , \sim ]$ - output: putdown
(in 7 (equivclass 7 ~))
- input: LaTeX
- Test 8
- input: LaTeX
[P]
, typeset $[P]$ - output: putdown
(equivclass P ~)
- input: LaTeX
- Test 9
- input: LaTeX
\left[P\right]
, typeset $\left[P\right]$ - output: putdown
(equivclass P ~)
- input: LaTeX
can convert equivalence and classes mod a number
- Test 1
- input: LaTeX
5 \equiv 11 \mod 3
, typeset $5 \equiv 11 \mod 3$ - output: putdown
(=mod 5 11 3)
- input: LaTeX
- Test 2
- input: LaTeX
k \equiv m \mod n
, typeset $k \equiv m \mod n$ - output: putdown
(=mod k m n)
- input: LaTeX
- Test 3
- input: LaTeX
\emptyset \subset [ - 1 , \equiv _ 10 ]
, typeset $\emptyset \subset [ - 1 , \equiv _ 10 ]$ - output: putdown
(subset emptyset (modclass (- 1) 10))
- input: LaTeX
- Test 4
- input: LaTeX
\emptyset \subset \left[ - 1 , \equiv _ 10 \right]
, typeset $\emptyset \subset \left[ - 1 , \equiv _ 10 \right]$ - output: putdown
(subset emptyset (modclass (- 1) 10))
- input: LaTeX
can convert type sentences and combinations of them
- Test 1
- input: LaTeX
x \text{is a set}
, typeset $x \text{is a set}$ - output: putdown
(hastype x settype)
- input: LaTeX
- Test 2
- input: LaTeX
n \text{is }\text{a number}
, typeset $n \text{is }\text{a number}$ - output: putdown
(hastype n numbertype)
- input: LaTeX
- Test 3
- input: LaTeX
S\text{is}~\text{a partial order}
, typeset $S\text{is}~\text{a partial order}$ - output: putdown
(hastype S partialordertype)
- input: LaTeX
- Test 4
- input: LaTeX
1\text{is a number}\wedge 10\text{is a number}
, typeset $1\text{is a number}\wedge 10\text{is a number}$ - output: putdown
(and (hastype 1 numbertype) (hastype 10 numbertype))
- input: LaTeX
- Test 5
- input: LaTeX
R\text{is an equivalence relation}\Rightarrow R\text{is a relation}
, typeset $R\text{is an equivalence relation}\Rightarrow R\text{is a relation}$ - output: putdown
(implies (hastype R equivalencerelationtype) (hastype R relationtype))
- input: LaTeX
can convert notation for expression function application
- Test 1
- input: LaTeX
\mathcal{f} (x)
, typeset $\mathcal{f} (x)$ - output: putdown
(efa f x)
- input: LaTeX
- Test 2
- input: LaTeX
F(\mathcal{k} (10))
, typeset $F(\mathcal{k} (10))$ - output: putdown
(apply F (efa k 10))
- input: LaTeX
- Test 3
- input: LaTeX
\mathcal{E} (\bar L)
, typeset $\mathcal{E} (\bar L)$ - output: putdown
(efa E (complement L))
- input: LaTeX
- Test 4
- input: LaTeX
\emptyset\cap \mathcal{f} (2)
, typeset $\emptyset\cap \mathcal{f} (2)$ - output: putdown
(intersection emptyset (efa f 2))
- input: LaTeX
- Test 5
- input: LaTeX
\mathcal{P} (x)\wedge \mathcal{Q} (y)
, typeset $\mathcal{P} (x)\wedge \mathcal{Q} (y)$ - output: putdown
(and (efa P x) (efa Q y))
- input: LaTeX
can convert notation for assumptions
- Test 1
- input: LaTeX
\text{Assume }X
, typeset $\text{Assume }X$ - output: putdown
:X
- input: LaTeX
- Test 2
- input: LaTeX
\text{Assume }k=1000
, typeset $\text{Assume }k=1000$ - output: putdown
:(= k 1000)
- input: LaTeX
- Test 3
- input: LaTeX
\text{Assume }\top
, typeset $\text{Assume }\top$ - output: putdown
:true
- input: LaTeX
- Test 4
- input: LaTeX
\text{Assume }50
, typeset $\text{Assume }50$ - output: putdown
null
- input: LaTeX
- Test 5
- input: LaTeX
\text{assume }(5,6)
, typeset $\text{assume }(5,6)$ - output: putdown
null
- input: LaTeX
- Test 6
- input: LaTeX
\text{Given }f\circ g
, typeset $\text{Given }f\circ g$ - output: putdown
null
- input: LaTeX
- Test 7
- input: LaTeX
\text{given }\emptyset
, typeset $\text{given }\emptyset$ - output: putdown
null
- input: LaTeX
- Test 8
- input: LaTeX
\text{Assume }\infty
, typeset $\text{Assume }\infty$ - output: putdown
null
- input: LaTeX
can convert notation for Let-style declarations
- Test 1
- input: LaTeX
\text{Let }x
, typeset $\text{Let }x$ - output: putdown
:[x]
- input: LaTeX
- Test 2
- input: LaTeX
\text{let }x
, typeset $\text{let }x$ - output: putdown
:[x]
- input: LaTeX
- Test 3
- input: LaTeX
\text{Let }T
, typeset $\text{Let }T$ - output: putdown
:[T]
- input: LaTeX
- Test 4
- input: LaTeX
\text{let }T
, typeset $\text{let }T$ - output: putdown
:[T]
- input: LaTeX
- Test 5
- input: LaTeX
\text{Let }x \text{ be such that }x>0
, typeset $\text{Let }x \text{ be such that }x>0$ - output: putdown
:[x , (> x 0)]
- input: LaTeX
- Test 6
- input: LaTeX
\text{let }x \text{ be such that }x>0
, typeset $\text{let }x \text{ be such that }x>0$ - output: putdown
:[x , (> x 0)]
- input: LaTeX
- Test 7
- input: LaTeX
\text{Let }T \text{ be such that }T=5\vee T\in S
, typeset $\text{Let }T \text{ be such that }T=5\vee T\in S$ - output: putdown
:[T , (or (= T 5) (in T S))]
- input: LaTeX
- Test 8
- input: LaTeX
\text{let }T \text{ be such that }T=5\vee T\in S
, typeset $\text{let }T \text{ be such that }T=5\vee T\in S$ - output: putdown
:[T , (or (= T 5) (in T S))]
- input: LaTeX
- Test 9
- input: LaTeX
\text{Let }x>5
, typeset $\text{Let }x>5$ - output: putdown
null
- input: LaTeX
- Test 10
- input: LaTeX
\text{Let }1=1
, typeset $\text{Let }1=1$ - output: putdown
null
- input: LaTeX
- Test 11
- input: LaTeX
\text{Let }\emptyset
, typeset $\text{Let }\emptyset$ - output: putdown
null
- input: LaTeX
- Test 12
- input: LaTeX
\text{Let }x \text{ be such that }1
, typeset $\text{Let }x \text{ be such that }1$ - output: putdown
null
- input: LaTeX
- Test 13
- input: LaTeX
\text{Let }x \text{ be such that }1\vee 2
, typeset $\text{Let }x \text{ be such that }1\vee 2$ - output: putdown
null
- input: LaTeX
- Test 14
- input: LaTeX
\text{Let }x \text{ be such that }\text{Let }y
, typeset $\text{Let }x \text{ be such that }\text{Let }y$ - output: putdown
null
- input: LaTeX
- Test 15
- input: LaTeX
\text{Let }x \text{ be such that }\text{Assume }B
, typeset $\text{Let }x \text{ be such that }\text{Assume }B$ - output: putdown
null
- input: LaTeX
can convert notation for For Some-style declarations
- Test 1
- input: LaTeX
\text{For some }x, x>0
, typeset $\text{For some }x, x>0$ - output: putdown
[x , (> x 0)]
- input: LaTeX
- Test 2
- input: LaTeX
\text{For some }T, T=5\vee T\in S
, typeset $\text{For some }T, T=5\vee T\in S$ - output: putdown
[T , (or (= T 5) (in T S))]
- input: LaTeX
- Test 3
- input: LaTeX
\text{For some }x
, typeset $\text{For some }x$ - output: putdown
null
- input: LaTeX
- Test 4
- input: LaTeX
\text{for some }x
, typeset $\text{for some }x$ - output: putdown
null
- input: LaTeX
- Test 5
- input: LaTeX
\text{For some }T
, typeset $\text{For some }T$ - output: putdown
null
- input: LaTeX
- Test 6
- input: LaTeX
\text{for some }T
, typeset $\text{for some }T$ - output: putdown
null
- input: LaTeX
- Test 7
- input: LaTeX
\text{For some }x>5, x>55
, typeset $\text{For some }x>5, x>55$ - output: putdown
null
- input: LaTeX
- Test 8
- input: LaTeX
\text{For some }1=1, P
, typeset $\text{For some }1=1, P$ - output: putdown
null
- input: LaTeX
- Test 9
- input: LaTeX
\text{For some }\emptyset, 1+1=2
, typeset $\text{For some }\emptyset, 1+1=2$ - output: putdown
null
- input: LaTeX
- Test 10
- input: LaTeX
x>55 \text{ for some } x>5
, typeset $x>55 \text{ for some } x>5$ - output: putdown
null
- input: LaTeX
- Test 11
- input: LaTeX
P \text{ for some } 1=1
, typeset $P \text{ for some } 1=1$ - output: putdown
null
- input: LaTeX
- Test 12
- input: LaTeX
\emptyset \text{ for some } 1+1=2
, typeset $\emptyset \text{ for some } 1+1=2$ - output: putdown
null
- input: LaTeX
- Test 13
- input: LaTeX
\text{For some }x, 1
, typeset $\text{For some }x, 1$ - output: putdown
null
- input: LaTeX
- Test 14
- input: LaTeX
\text{For some }x, 1\vee 2
, typeset $\text{For some }x, 1\vee 2$ - output: putdown
null
- input: LaTeX
- Test 15
- input: LaTeX
\text{For some }x, \text{Let }y
, typeset $\text{For some }x, \text{Let }y$ - output: putdown
null
- input: LaTeX
- Test 16
- input: LaTeX
\text{For some }x, \text{Assume }B
, typeset $\text{For some }x, \text{Assume }B$ - output: putdown
null
- input: LaTeX
- Test 17
- input: LaTeX
1~\text{for some}~x
, typeset $1~\text{for some}~x$ - output: putdown
null
- input: LaTeX
- Test 18
- input: LaTeX
1\vee 2~\text{for some}~x
, typeset $1\vee 2~\text{for some}~x$ - output: putdown
null
- input: LaTeX
- Test 19
- input: LaTeX
\text{Let }y~\text{for some}~x
, typeset $\text{Let }y~\text{for some}~x$ - output: putdown
null
- input: LaTeX
- Test 20
- input: LaTeX
\text{Assume }B~\text{for some}~x
, typeset $\text{Assume }B~\text{for some}~x$ - output: putdown
null
- input: LaTeX
Parsing MathLive-style LaTeX
correctly parses basic expressions
- Test 1
- input: LaTeX
6+k
, typeset $6+k$ - output: JSON
["Addition",["Number","6"],["NumberVariable","k"]]
- input: LaTeX
- Test 2
- input: LaTeX
1.9-T
, typeset $1.9-T$ - output: JSON
["Subtraction",["Number","1.9"],["NumberVariable","T"]]
- input: LaTeX
- Test 3
- input: LaTeX
0.2\cdot0.3
, typeset $0.2\cdot0.3$ - output: JSON
["Multiplication",["Number","0.2"],["Number","0.3"]]
- input: LaTeX
- Test 4
- input: LaTeX
0.2\ast0.3
, typeset $0.2\ast0.3$ - output: JSON
["Multiplication",["Number","0.2"],["Number","0.3"]]
- input: LaTeX
- Test 5
- input: LaTeX
v\div w
, typeset $v\div w$ - output: JSON
["Division",["NumberVariable","v"],["NumberVariable","w"]]
- input: LaTeX
- Test 6
- input: LaTeX
2^{k}
, typeset $2^{k}$ - output: JSON
["Exponentiation",["Number","2"],["NumberVariable","k"]]
- input: LaTeX
- Test 7
- input: LaTeX
5.0-K+e
, typeset $5.0-K+e$ - output: JSON
["Addition",["Subtraction",["Number","5.0"],["NumberVariable","K"]],"EulersNumber"]
- input: LaTeX
- Test 8
- input: LaTeX
5.0\times K\div e
, typeset $5.0\times K\div e$ - output: JSON
["Division",["Multiplication",["Number","5.0"],["NumberVariable","K"]],"EulersNumber"]
- input: LaTeX
- Test 9
- input: LaTeX
\left(a^{b}\right)^{c}
, typeset $\left(a^{b}\right)^{c}$ - output: JSON
["Exponentiation",["Exponentiation",["NumberVariable","a"],["NumberVariable","b"]],["NumberVariable","c"]]
- input: LaTeX
- Test 10
- input: LaTeX
5.0-K\cdot e
, typeset $5.0-K\cdot e$ - output: JSON
["Subtraction",["Number","5.0"],["Multiplication",["NumberVariable","K"],"EulersNumber"]]
- input: LaTeX
- Test 11
- input: LaTeX
u^{v}\times w^{x}
, typeset $u^{v}\times w^{x}$ - output: JSON
["Multiplication",["Exponentiation",["NumberVariable","u"],["NumberVariable","v"]],["Exponentiation",["NumberVariable","w"],["NumberVariable","x"]]]
- input: LaTeX
- Test 12
- input: LaTeX
-A^{B}
, typeset $-A^{B}$ - output: JSON
["NumberNegation",["Exponentiation",["NumberVariable","A"],["NumberVariable","B"]]]
- input: LaTeX
respects groupers while parsing
- Test 1
- input: LaTeX
6+\left(k+5\right)
, typeset $6+\left(k+5\right)$ - output: JSON
["Addition",["Number","6"],["Addition",["NumberVariable","k"],["Number","5"]]]
- input: LaTeX
- Test 2
- input: LaTeX
\left(5.0-K\right)\cdot e
, typeset $\left(5.0-K\right)\cdot e$ - output: JSON
["Multiplication",["Subtraction",["Number","5.0"],["NumberVariable","K"]],"EulersNumber"]
- input: LaTeX
- Test 3
- input: LaTeX
5.0\times\left(K+e\right)
, typeset $5.0\times\left(K+e\right)$ - output: JSON
["Multiplication",["Number","5.0"],["Addition",["NumberVariable","K"],"EulersNumber"]]
- input: LaTeX
- Test 4
- input: LaTeX
-\left(K+e\right)
, typeset $-\left(K+e\right)$ - output: JSON
["NumberNegation",["Addition",["NumberVariable","K"],"EulersNumber"]]
- input: LaTeX
- Test 5
- input: LaTeX
-\left(A^{B}\right)
, typeset $-\left(A^{B}\right)$ - output: JSON
["NumberNegation",["Exponentiation",["NumberVariable","A"],["NumberVariable","B"]]]
- input: LaTeX
correctly parses logarithms
- Test 1
- input: LaTeX
\log1000
, typeset $\log1000$ - output: JSON
["PrefixFunctionApplication","Logarithm",["Number","1000"]]
- input: LaTeX
- Test 2
- input: LaTeX
\log e^{x}\times y
, typeset $\log e^{x}\times y$ - output: JSON
["PrefixFunctionApplication","Logarithm",["Multiplication",["Exponentiation","EulersNumber",["NumberVariable","x"]],["NumberVariable","y"]]]
- input: LaTeX
- Test 3
- input: LaTeX
\log_{-t}\left(k+5\right)
, typeset $\log_{-t}\left(k+5\right)$ - output: JSON
["PrefixFunctionApplication",["LogarithmWithBase",["NumberNegation",["NumberVariable","t"]]],["Addition",["NumberVariable","k"],["Number","5"]]]
- input: LaTeX
correctly parses fractions
- Test 1
- input: LaTeX
\frac 1 2
, typeset $\frac 1 2$ - output: JSON
["Division",["Number","1"],["Number","2"]]
- input: LaTeX
- Test 2
- input: LaTeX
\frac{7-k}{1+x^2}
, typeset $\frac{7-k}{1+x^2}$ - output: JSON
["Division",["Subtraction",["Number","7"],["NumberVariable","k"]],["Addition",["Number","1"],["Exponentiation",["NumberVariable","x"],["Number","2"]]]]
- input: LaTeX
correctly parses sentences of arithmetic and algebra
- Test 1
- input: LaTeX
t+u\ne t+v
, typeset $t+u\ne t+v$ - output: JSON
["NotEqual",["Addition",["NumberVariable","t"],["NumberVariable","u"]],["Addition",["NumberVariable","t"],["NumberVariable","v"]]]
- input: LaTeX
- Test 2
- input: LaTeX
a\div{7+b}\approx0.75
, typeset $a\div{7+b}\approx0.75$ - output: JSON
["BinaryRelationHolds","ApproximatelyEqual",["Division",["NumberVariable","a"],["Addition",["Number","7"],["NumberVariable","b"]]],["Number","0.75"]]
- input: LaTeX
- Test 3
- input: LaTeX
\frac{a}{7+b}\approx0.75
, typeset $\frac{a}{7+b}\approx0.75$ - output: JSON
["BinaryRelationHolds","ApproximatelyEqual",["Division",["NumberVariable","a"],["Addition",["Number","7"],["NumberVariable","b"]]],["Number","0.75"]]
- input: LaTeX
- Test 4
- input: LaTeX
t^2\le10
, typeset $t^2\le10$ - output: JSON
["LessThanOrEqual",["Exponentiation",["NumberVariable","t"],["Number","2"]],["Number","10"]]
- input: LaTeX
- Test 5
- input: LaTeX
1+2+3\ge6
, typeset $1+2+3\ge6$ - output: JSON
["GreaterThanOrEqual",["Addition",["Addition",["Number","1"],["Number","2"]],["Number","3"]],["Number","6"]]
- input: LaTeX
- Test 6
- input: LaTeX
\neg A+B=C^{D}
, typeset $\neg A+B=C^{D}$ - output: JSON
["LogicalNegation",["Equals",["Addition",["NumberVariable","A"],["NumberVariable","B"]],["Exponentiation",["NumberVariable","C"],["NumberVariable","D"]]]]
- input: LaTeX
- Test 7
- input: LaTeX
\lnot\lnot x=x
, typeset $\lnot\lnot x=x$ - output: JSON
["LogicalNegation",["LogicalNegation",["EqualFunctions",["FunctionVariable","x"],["FunctionVariable","x"]]]]
- input: LaTeX
- Test 8
- input: LaTeX
3\vert 9
, typeset $3\vert 9$ - output: JSON
["BinaryRelationHolds","Divides",["Number","3"],["Number","9"]]
- input: LaTeX
correctly parses trigonometric function applications
- Test 1
- input: LaTeX
\cos x+1
, typeset $\cos x+1$ - output: JSON
["Addition",["PrefixFunctionApplication","CosineFunction",["NumberVariable","x"]],["Number","1"]]
- input: LaTeX
- Test 2
- input: LaTeX
\cot\left(a-9.9\right)
, typeset $\cot\left(a-9.9\right)$ - output: JSON
["PrefixFunctionApplication","CotangentFunction",["Subtraction",["NumberVariable","a"],["Number","9.9"]]]
- input: LaTeX
- Test 3
- input: LaTeX
\csc^{-1}\left(1+g\right)
, typeset $\csc^{-1}\left(1+g\right)$ - output: JSON
["PrefixFunctionApplication",["PrefixFunctionInverse","CosecantFunction"],["Addition",["Number","1"],["NumberVariable","g"]]]
- input: LaTeX
correctly parses factorials
- Test 1
- input: LaTeX
\left(W+R\right)!
, typeset $\left(W+R\right)!$ - output: JSON
["Factorial",["Addition",["NumberVariable","W"],["NumberVariable","R"]]]
- input: LaTeX
correctly parses unusual implication symbols
- Test 1
- input: LaTeX
P\Rarr Q
, typeset $P\Rarr Q$ - output: JSON
["Implication",["LogicVariable","P"],["LogicVariable","Q"]]
- input: LaTeX
- Test 2
- input: LaTeX
P\rArr Q
, typeset $P\rArr Q$ - output: JSON
["Implication",["LogicVariable","P"],["LogicVariable","Q"]]
- input: LaTeX
- Test 3
- input: LaTeX
Q\Larr P
, typeset $Q\Larr P$ - output: JSON
["Implication",["LogicVariable","P"],["LogicVariable","Q"]]
- input: LaTeX
- Test 4
- input: LaTeX
Q\lArr P
, typeset $Q\lArr P$ - output: JSON
["Implication",["LogicVariable","P"],["LogicVariable","Q"]]
- input: LaTeX
- Test 5
- input: LaTeX
P\lrArr Q
, typeset $P\lrArr Q$ - output: JSON
["LogicalEquivalence",["LogicVariable","P"],["LogicVariable","Q"]]
- input: LaTeX
- Test 6
- input: LaTeX
P\Lrarr Q
, typeset $P\Lrarr Q$ - output: JSON
["LogicalEquivalence",["LogicVariable","P"],["LogicVariable","Q"]]
- input: LaTeX
correctly parses unusual set theory notation
- Test 1
- input: LaTeX
(A\cup B)^{\complement}
, typeset $(A\cup B)^{\complement}$ - output: JSON
["SetComplement",["SetUnion",["SetVariable","A"],["SetVariable","B"]]]
- input: LaTeX
correctly parses unusual function signature notation
- Test 1
- input: LaTeX
f:A\rarr B
, typeset $f:A\rarr B$ - output: JSON
["FunctionSignature",["FunctionVariable","f"],["SetVariable","A"],["SetVariable","B"]]
- input: LaTeX
- Test 2
- input: LaTeX
f\colon A\rarr B
, typeset $f\colon A\rarr B$ - output: JSON
["FunctionSignature",["FunctionVariable","f"],["SetVariable","A"],["SetVariable","B"]]
- input: LaTeX