Two physical quantities are compatible if their physical-dimensions are equal. Compatibility constrains how quantities can be compared and combined with algebraic operators.
(<=> (Compatible-Quantities ?X ?Y) (And (Physical-Quantity ?X) (Physical-Quantity ?Y) (= (Quantity.Dimension ?X) (Quantity.Dimension ?Y))))
(=> (Compatible-Quantities $X $Y) (Physical-Quantity $Y)) (=> (Compatible-Quantities $X $Y) (Physical-Quantity $X)) (<=> (Compatible-Quantities ?X ?Y) (And (Physical-Quantity ?X) (Physical-Quantity ?Y) (= (Quantity.Dimension ?X) (Quantity.Dimension ?Y)))) (=> (= (Magnitude ?Q ?Unit) ?Mag) (Compatible-Quantities ?Q ?Unit)) (=> (And (Physical-Quantity ?X) (Physical-Quantity ?Y) (+ ?X ?Y ?Z)) (And (Physical-Quantity ?Z) (Compatible-Quantities ?X ?Y) (Compatible-Quantities ?X ?Z))) (Forall (@Args) (<=> (And (Holds ?R @Args) (=> (Item ?Q (Listof @Args)) (Constant-Quantity ?Q))) (Forall (?Unit ?Q) (=> (And (Unit-Of-Measure ?Unit) (=> (Item ?Q (Listof @Args)) (Compatible-Quantities ?Q ?Unit))) (Member (Map (Lambda (?Q) (Magnitude ?Q ?Unit)) (Listof @Args)) ?R))))) (<=> (Relation-Extended-To-Quantities ?R) (And (Relation ?R) (Forall (@Args) (<=> (And (Holds ?R @Args) (=> (Item ?Q (Listof @Args)) (Constant-Quantity ?Q))) (Forall (?Unit ?Q) (=> (And (Unit-Of-Measure ?Unit) (=> (Item ?Q (Listof @Args)) (Compatible-Quantities ?Q ?Unit))) (Member (Map (Lambda (?Q) (Magnitude ?Q ?Unit)) (Listof @Args)) ?R))))))) (Forall (?Other-Unit) (=> (And (Unit-Of-Measure ?Other-Unit) (Compatible-Quantities ?U ?Other-Unit)) (And (Real-Number (Magnitude ?U ?Other-Unit)) (Positive (Magnitude ?U ?Other-Unit))))) (<=> (Unit-Of-Measure ?U) (And (Constant-Quantity ?U) (Forall (?Other-Unit) (=> (And (Unit-Of-Measure ?Other-Unit) (Compatible-Quantities ?U ?Other-Unit)) (And (Real-Number (Magnitude ?U ?Other-Unit)) (Positive (Magnitude ?U ?Other-Unit)))))))
(* 20 meters)