āĻāĻ¨ā§āĻˇā§āĻ āĻžāĻ¨āĻŋāĻ āĻ¯āĻžāĻāĻžāĻ āĻšāĻ˛ āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻŦāĻž āĻ ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ āĻ¨ā§āĻ¯āĻāĻŋ āĻ¯āĻžāĻāĻžāĻ āĻāĻ°āĻžāĨ¤
āĻāĻāĻŋ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻļāĻā§āĻ¤āĻŋāĻļāĻžāĻ˛ā§ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻ¯āĻž āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĻā§āĻ°ā§āĻŦāĻ˛āĻ¤āĻž āĻā§āĻāĻā§ āĻĒā§āĻ¤ā§ āĻŦāĻž āĻĒā§āĻ°āĻŽāĻžāĻŖ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧ āĻ¯ā§ āĻ¸ā§āĻā§āĻ˛āĻŋ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨ āĻ¨ā§āĻāĨ¤
āĻāĻ¨ā§āĻˇā§āĻ āĻžāĻ¨āĻŋāĻ āĻ¯āĻžāĻāĻžāĻāĻāĻ°āĻŖā§āĻ° āĻāĻ°āĻ āĻŦāĻŋāĻļāĻĻ āĻŦāĻŋāĻŦāĻ°āĻŖ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ā§āĻ° āĻāĻĻāĻžāĻšāĻ°āĻŖā§ āĻĻā§āĻāĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§
āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§ āĻāĻŽāĻŋ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻˇā§āĻ āĻžāĻ¨āĻŋāĻ āĻ¯āĻžāĻāĻžāĻāĻāĻ°āĻŖ āĻĨā§āĻā§ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻā§āĻ˛āĻŋāĻ¤ā§ āĻāĻ˛ā§ āĻ¯āĻžāĻ āĻāĻŦāĻ āĻā§āĻāĻžāĻŦā§ āĻ¤āĻž āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻŋ
āĻāĻŋāĻāĻžāĻŦā§ āĻāĻĒāĻ¨āĻŋ āĻ¤āĻžāĻĻā§āĻ° āĻāĻ¨ā§āĻˇā§āĻ āĻžāĻ¨āĻŋāĻ āĻ¨āĻŋāĻ¯āĻŧāĻŽā§āĻ° āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻāĻāĻŋ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŽāĻŋ āĻĒā§āĻ°āĻ¤ā§āĻā§ āĻ¨ā§āĻ¤āĻŋāĻā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻāĻāĻŋ āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§āĻļāĻŋāĻ¨ā§āĻ° āĻāĻŽāĻžāĻ° āĻ¨āĻŋāĻāĻ¸ā§āĻŦ āĻ ā§āĻ¯āĻžāĻ¨āĻžāĻ˛āĻ āĻ˛āĻŋāĻā§āĻāĻŋāĨ¤
āĻāĻāĻŋ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻā§āĻĄ āĻĒāĻžāĻ°ā§āĻ¸ āĻāĻ°ā§ āĻāĻŦāĻ āĻāĻāĻŋāĻā§ āĻāĻāĻāĻŋ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻ āĻĢ āĻāĻā§āĻ¯āĻŧā§āĻļāĻ¨ (SMT) āĻ¤ā§ āĻ āĻ¨ā§āĻŦāĻžāĻĻ āĻāĻ°ā§, āĻ¯āĻž āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻāĻ¤āĻāĻžāĻŦā§ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻ¯ā§āĻšā§āĻ¤ā§ āĻĒā§āĻ°āĻ¤ā§āĻā§ āĻāĻŖāĻ¨āĻž āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻ¤āĻĨā§āĻ¯ āĻāĻ¨ā§āĻāĻžāĻ°āĻ¨ā§āĻā§ āĻŦāĻ°āĻ āĻāĻŖā§āĻĄāĻŋāĻ¤āĻāĻžāĻŦā§ āĻāĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻŋāĻ¤ āĻšāĻ¯āĻŧ,
āĻāĻŽāĻŋ āĻ¸āĻāĻā§āĻˇā§āĻĒā§ āĻāĻāĻž āĻāĻŋ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻŦ.
āĻ¸āĻŋāĻŽā§āĻŦāĻ˛āĻŋāĻ āĻāĻŽā§āĻĒāĻŋāĻāĻā§āĻļāĻ¨ āĻšāĻ˛ āĻāĻāĻ¯ā§āĻā§ āĻŦāĻŋāĻ¸ā§āĻ¤ā§āĻ¤ āĻĄā§āĻāĻžāĻ° āĻāĻĒāĻ° āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻāĻāĻāĻŋ āĻāĻĒāĻžāĻ¯āĻŧ āĻāĻŦāĻ āĻāĻ¨ā§āĻˇā§āĻ āĻžāĻ¨āĻŋāĻ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻ¯āĻžāĻāĻžāĻāĻ¯āĻŧā§āĻ° āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻšāĻžāĻ¤āĻŋāĻ¯āĻŧāĻžāĻ°āĨ¤
āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻŽāĻ°āĻž āĻāĻ¨āĻĒā§āĻ āĻļāĻ°ā§āĻ¤ āĻ¸ā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻĒā§āĻ°āĻĨāĻŽ āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻ āĻ¯ā§āĻā§āĻ¨ā§ āĻāĻ¤āĻŋāĻŦāĻžāĻāĻ āĻŽāĻžāĻ¨, āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧ āĻ¨ā§āĻ¤āĻŋāĻŦāĻžāĻāĻ, āĻ¤ā§āĻ¤ā§āĻ¯āĻŧ āĻļā§āĻ¨ā§āĻ¯ āĻāĻŦāĻ āĻāĻāĻāĻĒā§āĻ āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻ āĻ¨āĻŋāĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, 42āĨ¤
āĻāĻ āĻĻā§āĻĄāĻŧā§ āĻĒā§āĻ°āĻ¤ā§āĻā§ āĻāĻŖāĻ¨āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻžāĻā§āĻāĻŋāĻ¤ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻāĻŦāĻ āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻāĻ¨āĻĒā§āĻ āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋāĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻ¸ā§āĻā§āĻ° āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¸āĻŽā§āĻāĻŦ āĻāĻŋāĻ¨āĻž āĻ¤āĻžāĻ° āĻāĻ¤ā§āĻ¤āĻ° āĻĻā§āĻŦā§āĨ¤ āĻ āĻĨāĻŦāĻž āĻĒā§āĻ°āĻŽāĻžāĻŖ āĻ¯ā§ āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻā§āĻ¨ āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋ āĻ¨ā§āĻāĨ¤
āĻ āĻ§āĻŋāĻāĻ¨ā§āĻ¤ā§, āĻāĻŽāĻ°āĻž āĻ¸āĻŽā§āĻāĻžāĻŦā§āĻ¯ āĻ¸āĻāĻ˛ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ¨āĻĒā§āĻ āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻ āĻ¸ā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ āĻāĻŦāĻ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻāĻāĻĒā§āĻāĻā§āĻ˛āĻŋ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻĒā§āĻ°āĻļāĻžāĻ¸āĻā§āĻ° āĻĒāĻžāĻ¸āĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄāĨ¤
āĻāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, āĻāĻŽāĻ°āĻž āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽā§āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĻā§āĻ°ā§āĻŦāĻ˛āĻ¤āĻž āĻā§āĻāĻā§ āĻĒāĻžāĻŦ āĻŦāĻž āĻĒā§āĻ°āĻļāĻžāĻ¸āĻā§āĻ° āĻĒāĻžāĻ¸āĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻ¨āĻŋāĻ°āĻžāĻĒāĻĻ āĻŦāĻ˛ā§ āĻĒā§āĻ°āĻŽāĻžāĻŖ āĻĒāĻžāĻŦāĨ¤
āĻāĻāĻŋ āĻ˛āĻā§āĻˇ āĻāĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ āĻ¯ā§ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ¨āĻĒā§āĻ āĻĄā§āĻāĻž āĻ¸āĻš āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽā§āĻ° āĻā§āĻ˛āĻžāĻ¸āĻŋāĻā§āĻ¯āĻžāĻ˛ āĻāĻā§āĻ¸āĻŋāĻāĻŋāĻāĻļāĻ¨ āĻšāĻ˛ āĻ¸āĻŋāĻŽā§āĻŦāĻ˛āĻŋāĻ āĻāĻā§āĻ¸āĻŋāĻāĻŋāĻāĻļāĻ¨ā§āĻ° āĻāĻāĻāĻŋ āĻŦāĻŋāĻļā§āĻˇ āĻā§āĻ¸āĨ¤
āĻ āĻ¤āĻāĻŦ, āĻāĻŽāĻžāĻ° āĻāĻ°āĻŋāĻ¤ā§āĻ° VM āĻāĻāĻāĻŋ āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§āĻļāĻŋāĻ¨ā§āĻ° āĻāĻŽā§āĻ˛ā§āĻļāĻ¨ āĻŽā§āĻĄā§āĻ āĻāĻžāĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻĒā§āĻ°ā§āĻŦāĻŦāĻ°ā§āĻ¤ā§ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§āĻ° āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ā§ āĻā§āĻ āĻāĻ° āĻĻā§āĻ°ā§āĻŦāĻ˛āĻ¤āĻžāĻā§āĻ˛āĻŋāĻ° āĻāĻ˛ā§āĻāĻ¨āĻžāĻ° āĻ¸āĻžāĻĨā§ āĻāĻ¨ā§āĻˇā§āĻ āĻžāĻ¨āĻŋāĻ āĻ¯āĻžāĻāĻžāĻāĻāĻ°āĻŖā§āĻ° āĻ¨ā§āĻ¯āĻžāĻ¯ā§āĻ¯ āĻ¸āĻŽāĻžāĻ˛ā§āĻāĻ¨āĻž āĻā§āĻāĻā§ āĻĒā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻšāĻ˛:
- āĻāĻŽā§āĻŦāĻŋāĻ¨ā§āĻāĻ°āĻŋāĻ¯āĻŧāĻžāĻ˛ āĻŦāĻŋāĻ¸ā§āĻĢā§āĻ°āĻŖ, āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻ¨ā§āĻˇā§āĻ āĻžāĻ¨āĻŋāĻ āĻ¯āĻžāĻāĻžāĻāĻāĻ°āĻŖ āĻļā§āĻˇ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ P=NP-āĻ¤ā§ āĻ¨ā§āĻŽā§ āĻāĻ¸ā§
- āĻĢāĻžāĻāĻ˛ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ, āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻāĻŦāĻ āĻ āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻŦāĻžāĻšā§āĻ¯āĻŋāĻ āĻ¸āĻā§āĻāĻ¯āĻŧāĻ¸ā§āĻĨāĻžāĻ¨ā§ āĻāĻ˛ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻ°āĻŖ āĻ¯āĻžāĻāĻžāĻ āĻāĻ°āĻž āĻāĻ°āĻ āĻāĻ āĻŋāĻ¨
- āĻ¸ā§āĻĒā§āĻ¸āĻŋāĻĢāĻŋāĻā§āĻļāĻ¨ā§ āĻŦāĻžāĻ, āĻ¯āĻāĻ¨ āĻā§āĻ°āĻžāĻšāĻ āĻŦāĻž āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻžāĻ° āĻāĻāĻāĻŋ āĻāĻŋāĻ¨āĻŋāĻ¸ āĻāĻĻā§āĻĻā§āĻļā§āĻ¯ āĻāĻ°ā§, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻĒā§āĻ°āĻ¯ā§āĻā§āĻ¤āĻŋāĻāĻ¤ āĻ¸ā§āĻĒā§āĻ¸āĻŋāĻĢāĻŋāĻā§āĻļāĻ¨ā§ āĻ¯āĻĨā§āĻˇā§āĻ āĻ¸āĻ āĻŋāĻāĻāĻžāĻŦā§ āĻ¤āĻž āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°ā§āĻ¨āĻŋāĨ¤
āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻāĻŋ āĻ¯āĻžāĻāĻžāĻ āĻāĻ°āĻž āĻšāĻŦā§ āĻāĻŦāĻ āĻ¸ā§āĻĒā§āĻ¸āĻŋāĻĢāĻŋāĻā§āĻļāĻ¨ āĻŽā§āĻ¨ā§ āĻāĻ˛āĻŦā§, āĻ¤āĻŦā§ āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻ¤āĻžāĻ°āĻž āĻāĻāĻŋ āĻĨā§āĻā§ āĻ¯āĻž āĻāĻļāĻž āĻāĻ°ā§āĻāĻŋāĻ˛ā§āĻ¨ āĻ¤āĻžāĻ° āĻĨā§āĻā§ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻāĻŋāĻ¨ā§āĻ¨ āĻāĻŋāĻā§ āĻāĻ°āĻŦā§āĨ¤
āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§ āĻāĻŽāĻŋ āĻĒā§āĻ°āĻ§āĻžāĻ¨āĻ¤ āĻ āĻ¨ā§āĻļā§āĻ˛āĻ¨ā§ āĻāĻ¨ā§āĻˇā§āĻ āĻžāĻ¨āĻŋāĻ āĻ¯āĻžāĻāĻžāĻāĻāĻ°āĻŖā§āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻŦāĻŋāĻŦā§āĻāĻ¨āĻž āĻāĻ°āĻāĻŋ, āĻ¤āĻžāĻ āĻāĻŽāĻŋ āĻāĻĒāĻžāĻ¤āĻ¤ āĻĻā§āĻ¯āĻŧāĻžāĻ˛ā§ āĻŽāĻžāĻĨāĻž āĻ ā§āĻāĻŦ āĻ¨āĻž āĻāĻŦāĻ āĻāĻŽāĻ¨ āĻāĻāĻāĻŋ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻŦā§āĻā§ āĻ¨ā§āĻŦ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻ ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽāĻŋāĻ āĻāĻāĻŋāĻ˛āĻ¤āĻž āĻāĻŦāĻ āĻŦāĻžāĻšā§āĻ¯āĻŋāĻ āĻāĻ˛ā§āĻ° āĻ¸āĻāĻā§āĻ¯āĻž āĻ¨ā§āĻ¯ā§āĻ¨āĻ¤āĻŽāĨ¤
āĻ¯ā§āĻšā§āĻ¤ā§ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻ āĻā§āĻā§āĻ¤āĻŋāĻā§āĻ˛āĻŋ āĻāĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧāĻ¤āĻžāĻā§āĻ˛āĻŋāĻā§ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻāĻžāĻ˛ āĻāĻ°ā§, āĻ¤āĻžāĻ āĻĒāĻāĻ¨ā§āĻĻāĻāĻŋ āĻāĻ¯āĻŧā§āĻāĻ¸ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻāĻĢāĻ°ā§āĻŽ āĻĨā§āĻā§ RIDE āĻā§āĻā§āĻ¤āĻŋāĻ¤ā§ āĻĒāĻĄāĻŧā§: āĻ¤āĻžāĻ°āĻž āĻā§āĻ°āĻŋāĻ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻ¨āĻ¯āĻŧ āĻāĻŦāĻ āĻ¤āĻžāĻĻā§āĻ° āĻ¸āĻ°ā§āĻŦāĻžāĻ§āĻŋāĻ āĻāĻāĻŋāĻ˛āĻ¤āĻž āĻā§āĻ¤ā§āĻ°āĻŋāĻŽāĻāĻžāĻŦā§ āĻ¸ā§āĻŽāĻŋāĻ¤ā§ˇ
āĻ¤āĻŦā§ āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻ¯ā§āĻā§āĻ¤āĻŋāĻāĻ¤ āĻĻāĻŋāĻ āĻĨā§āĻā§ āĻ¤āĻžāĻĻā§āĻ° āĻāĻāĻā§āĻāĻŋāĻ¯āĻŧāĻžāĻāĻžāĻŦā§ āĻŦāĻŋāĻŦā§āĻāĻ¨āĻž āĻāĻ°āĻŦāĨ¤
āĻ¸āĻŦāĻāĻŋāĻā§āĻ° āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ, āĻāĻ¨ā§āĻˇā§āĻ āĻžāĻ¨āĻŋāĻ āĻ¯āĻžāĻāĻžāĻāĻāĻ°āĻŖ āĻŦāĻŋāĻļā§āĻˇ āĻāĻ°ā§ āĻ¯ā§āĻā§āĻ¨ā§ āĻā§āĻā§āĻ¤āĻŋāĻ° āĻāĻžāĻšāĻŋāĻĻāĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻĨāĻžāĻāĻŦā§: āĻāĻāĻŋ āĻāĻžāĻ˛ā§ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻĒāĻ°ā§ āĻā§āĻā§āĻ¤āĻŋāĻ° āĻ¤ā§āĻ°ā§āĻāĻŋ āĻ¸āĻāĻļā§āĻ§āĻ¨ āĻāĻ°āĻž āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻ
āĻ¸āĻŽā§āĻāĻŦāĨ¤
āĻāĻŦāĻ āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻ¤ā§āĻ°ā§āĻāĻŋāĻā§āĻ˛āĻŋāĻ° āĻāĻ°āĻ āĻā§āĻŦ āĻŦā§āĻļāĻŋ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻ¯ā§āĻšā§āĻ¤ā§ āĻŦā§āĻļ āĻŦāĻĄāĻŧ āĻĒāĻ°āĻŋāĻŽāĻžāĻŖā§ āĻ¤āĻšāĻŦāĻŋāĻ˛ āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻ āĻā§āĻā§āĻ¤āĻŋāĻ¤ā§ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤
āĻāĻŽāĻžāĻ° āĻ¸āĻŋāĻŽā§āĻŦāĻ˛āĻŋāĻ āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§āĻļāĻŋāĻ¨ āĻĒāĻŋāĻāĻāĻāĻĒāĻŋ āĻāĻŦāĻ āĻĒāĻžāĻāĻĨāĻ¨ā§ āĻ˛ā§āĻāĻž, āĻāĻŦāĻ āĻĢāĻ˛ā§ āĻāĻ¸āĻāĻŽāĻāĻŋ āĻ¸ā§āĻ¤ā§āĻ°āĻā§āĻ˛āĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻ°āĻ¤ā§ āĻŽāĻžāĻāĻā§āĻ°ā§āĻ¸āĻĢā§āĻ āĻ°āĻŋāĻ¸āĻžāĻ°ā§āĻ āĻĨā§āĻā§ Z3Prover āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĨ¤
āĻāĻ° āĻŽā§āĻ˛ā§ āĻ°āĻ¯āĻŧā§āĻā§ āĻāĻāĻāĻŋ āĻļāĻā§āĻ¤āĻŋāĻļāĻžāĻ˛ā§ āĻŦāĻšā§-āĻ˛ā§āĻ¨āĻĻā§āĻ¨ āĻ
āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨, āĻ¯āĻž
āĻāĻĒāĻ¨āĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻŦāĻž āĻĻā§āĻ°ā§āĻŦāĻ˛āĻ¤āĻž āĻā§āĻāĻā§ āĻĒā§āĻ¤ā§ āĻ
āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻ¯āĻŧ, āĻāĻŽāĻ¨āĻāĻŋ āĻ¯āĻĻāĻŋ āĻāĻāĻŋ āĻ
āĻ¨ā§āĻ āĻ˛ā§āĻ¨āĻĻā§āĻ¨ā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻ¯āĻŧ.
āĻāĻŽāĻ¨ āĻāĻŋ
āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻāĻŋ āĻ˛āĻā§āĻˇāĻŖā§āĻ¯āĻŧ āĻ¯ā§ āĻāĻĨāĻžāĻ° āĻā§āĻā§āĻ¤āĻŋāĻā§āĻ˛āĻŋ āĻāĻ°āĻ āĻāĻāĻŋāĻ˛ āĻāĻŦāĻ āĻā§āĻ°āĻŋāĻ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖāĨ¤
PHP RIDE āĻ¸ā§āĻŽāĻžāĻ°ā§āĻ āĻāĻ¨ā§āĻā§āĻ°āĻžāĻā§āĻā§āĻ° āĻ¸ā§āĻ°ā§āĻ¸ āĻā§āĻĄāĻā§ āĻāĻāĻāĻŋ āĻĒāĻžāĻāĻĨāĻ¨ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻā§ āĻ āĻ¨ā§āĻŦāĻžāĻĻ āĻāĻ°ā§, āĻ¯ā§āĻāĻžāĻ¨ā§ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻāĻŋāĻā§ āĻ¤āĻžāĻĻā§āĻ° āĻā§āĻ°āĻžāĻ¨āĻāĻŋāĻļāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻā§āĻ¤āĻŋāĻ° āĻ āĻŦāĻ¸ā§āĻĨāĻž āĻāĻŦāĻ āĻļāĻ°ā§āĻ¤āĻā§āĻ˛āĻŋāĻ° Z3 SMT-āĻ¸āĻžāĻŽāĻā§āĻāĻ¸ā§āĻ¯āĻĒā§āĻ°ā§āĻŖ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧ:
āĻāĻāĻ¨ āĻāĻŽāĻŋ āĻāĻ°āĻ āĻŦāĻŋāĻļāĻĻā§ āĻāĻŋāĻ¤āĻ°ā§ āĻā§ āĻāĻāĻā§ āĻ¤āĻž āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻŦāĨ¤
āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻĒā§āĻ°āĻĨāĻŽā§, RIDE āĻ¸ā§āĻŽāĻžāĻ°ā§āĻ āĻā§āĻā§āĻ¤āĻŋāĻ° āĻāĻžāĻˇāĻž āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻļāĻŦā§āĻĻāĨ¤
āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻāĻžāĻ°ā§āĻ¯āĻāĻ°ā§ āĻāĻŦāĻ āĻ
āĻāĻŋāĻŦā§āĻ¯āĻā§āĻ¤āĻŋ-āĻāĻŋāĻ¤ā§āĻ¤āĻŋāĻ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻŋāĻ āĻāĻžāĻˇāĻž āĻ¯āĻž āĻĄāĻŋāĻāĻžāĻāĻ¨ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ
āĻ˛āĻ¸āĨ¤
RIDE āĻŦā§āĻ˛āĻāĻā§āĻāĻ¨ā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻŦāĻŋāĻā§āĻāĻŋāĻ¨ā§āĻ¨āĻāĻžāĻŦā§ āĻāĻ˛ā§ āĻāĻŦāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻāĻ¯āĻŧāĻžāĻ˛ā§āĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻāĻ¯ā§āĻā§āĻ¤ āĻ¸ā§āĻā§āĻ°ā§āĻ āĻĨā§āĻā§ āĻ¤āĻĨā§āĻ¯ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻāĻŦāĻ āĻ˛āĻŋāĻāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻāĻĒāĻ¨āĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻāĻ¯āĻŧāĻžāĻ˛ā§āĻā§ āĻāĻāĻāĻŋ RIDE āĻā§āĻā§āĻ¤āĻŋ āĻ¸āĻāĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°āĻžāĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¸āĻ¤ā§āĻ¯ āĻŦāĻž āĻŽāĻŋāĻĨā§āĻ¯āĻž āĻšāĻŦā§ā§ˇ
TRUE āĻāĻ° āĻ
āĻ°ā§āĻĨ āĻšāĻ˛ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻ āĻā§āĻā§āĻ¤āĻŋ āĻ˛ā§āĻ¨āĻĻā§āĻ¨ā§āĻ° āĻ
āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻ¯āĻŧ āĻāĻŦāĻ FALSE āĻŽāĻžāĻ¨ā§ āĻāĻāĻŋ āĻ¨āĻŋāĻˇāĻŋāĻĻā§āĻ§ āĻāĻ°ā§ā§ˇ
āĻāĻāĻāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻāĻĻāĻžāĻšāĻ°āĻŖ: āĻāĻ¯āĻŧāĻžāĻ˛ā§āĻ āĻŦā§āĻ¯āĻžāĻ˛ā§āĻ¨ā§āĻ¸ 100-āĻāĻ° āĻāĻŽ āĻšāĻ˛ā§ āĻāĻāĻāĻŋ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻ¨āĻŋāĻˇāĻŋāĻĻā§āĻ§ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻšāĻŋāĻ¸āĻžāĻŦā§, āĻāĻŽāĻŋ āĻāĻāĻ āĻ¨ā§āĻāĻĄāĻŧā§, āĻāĻžāĻāĻ˛ āĻāĻŦāĻ āĻŦāĻžāĻāĻ§āĻžāĻāĻĒāĻŋ āĻ¨ā§āĻŦ, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻ āĻā§āĻā§āĻ¤āĻŋāĻ° āĻāĻāĻžāĻ°ā§ āĻāĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻŋāĻ¤āĨ¤
āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻ¯ā§ āĻŽāĻžāĻ¨āĻŋāĻŦā§āĻ¯āĻžāĻāĻāĻŋāĻ¤ā§ āĻā§āĻā§āĻ¤āĻŋāĻāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§ āĻ¤āĻž āĻĨā§āĻā§ āĻāĻžāĻāĻž āĻ¤ā§āĻ˛āĻ¤ā§ āĻĒāĻžāĻ°āĻŦā§āĻ¨ āĻ¨āĻž āĻ¯āĻ¤āĻā§āĻˇāĻŖ āĻ¨āĻž āĻ¤āĻŋāĻ¨āĻŋ āĻ¸āĻŦāĻžāĻāĻā§ āĻ āĻ¨ā§āĻ¯ āĻĻāĻŋāĻā§ āĻ¨āĻž āĻĒāĻžāĻ āĻŋāĻ¯āĻŧā§āĻā§āĻ¨āĨ¤
#ĐСвĐģĐĩĐēĐ°ĐĩĐŧ ĐŋĐžĐģĐžĐļĐĩĐŊиĐĩ вŅĐĩŅ
ОйŅĐĩĐēŅОв иС ĐąĐģĐžĐēŅĐĩĐšĐŊĐ°
let contract = tx.sender
let human= extract(getInteger(contract,"human"))
let wolf= extract(getInteger(contract,"wolf"))
let goat= extract(getInteger(contract,"goat"))
let cabbage= extract(getInteger(contract,"cabbage"))
#ĐŅĐž ŅĐ°Đē ĐŊаСŅваĐĩĐŧĐ°Ņ Đ´Đ°ŅĐ°-ŅŅĐ°ĐŊСаĐēŅиŅ, в ĐēĐžŅĐžŅОК ĐŋĐžĐģŅСОваŅĐĩĐģŅ ĐŋŅиŅŅĐģĐ°ĐĩŅ ĐŊОвŅĐĩ 4 ĐŋĐĩŅĐĩĐŧĐĩĐŊĐŊŅĐĩ.
#ĐĐžĐŊŅŅĐ°ĐēŅ ŅаСŅĐĩŅиŅ ĐĩŅ ŅĐžĐģŅĐēĐž в ŅĐģŅŅĐ°Đĩ ĐĩŅĐģи вŅĐĩ ОйŅĐĩĐēŅŅ ĐžŅŅĐ°ĐŊŅŅŅŅ в ŅĐžŅ
ŅĐ°ĐŊĐŊĐžŅŅи.
match tx {
case t:DataTransaction =>
#ĐСвĐģĐĩĐēĐ°ĐĩĐŧ ĐąŅĐ´ŅŅĐĩĐĩ ĐŋĐžĐģĐžĐļĐĩĐŊиĐĩ вŅĐĩŅ
ОйŅĐĩĐēŅОв иС ŅŅĐ°ĐŊСаĐēŅии
let newHuman= extract(getInteger(t.data,"human"))
let newWolf= extract(getInteger(t.data,"wolf"))
let newGoat= extract(getInteger(t.data,"goat"))
let newCabbage= extract(getInteger(t.data,"cabbage"))
#0 ОйОСĐŊĐ°ŅĐ°ĐĩŅ, ŅŅĐž ОйŅĐĩĐēŅ ĐŊĐ° ĐģĐĩвОĐŧ ĐąĐĩŅĐĩĐŗŅ, Đ° 1 ŅŅĐž ĐŊĐ° ĐŋŅавОĐŧ
let humanSide= human == 0 || human == 1
let wolfSide= wolf == 0 || wolf == 1
let goatSide= goat == 0 || goat == 1
let cabbageSide= cabbage == 0 || cabbage == 1
let side= humanSide && wolfSide && goatSide && cabbageSide
#ĐŅĐ´ŅŅ ŅаСŅĐĩŅĐĩĐŊŅ ŅĐžĐģŅĐēĐž ŅĐĩ ŅŅĐ°ĐŊСаĐēŅии, ĐŗĐ´Đĩ Ņ ĐēОСОК ĐŊиĐēĐžĐŗĐž ĐŊĐĩŅ в ĐžŅŅŅŅŅŅвии ŅĐĩŅĐŧĐĩŅĐ°.
let safeAlone= newGoat != newWolf && newGoat != newCabbage
let safe= safeAlone || newGoat == newHuman
let humanTravel= human != newHuman
#ĐĄĐŋĐžŅОйŅ ĐŋŅŅĐĩŅĐĩŅŅвиŅ ŅĐĩŅĐŧĐĩŅĐ° ŅŅĐ´Đ° и ОйŅĐ°ŅĐŊĐž, Ņ ĐēĐĩĐŧ-ŅĐž ĐģийО в ОдиĐŊĐžŅĐēŅ.
let t1= humanTravel && newWolf == wolf + 1 && newGoat == goat && newCabbage == cabbage
let t2= humanTravel && newWolf == wolf && newGoat == goat + 1 && newCabbage == cabbage
let t3= humanTravel && newWolf == wolf && newGoat == goat && newCabbage == cabbage + 1
let t4= humanTravel && newWolf == wolf - 1 && newGoat == goat && newCabbage == cabbage
let t5= humanTravel && newWolf == wolf && newGoat == goat - 1 && newCabbage == cabbage
let t6= humanTravel && newWolf == wolf && newGoat == goat && newCabbage == cabbage - 1
let t7= humanTravel && newWolf == wolf && newGoat == goat && newCabbage == cabbage
let objectTravel = t1 || t2 || t3 || t4 || t5 || t6 || t7
#ĐĐžŅĐģĐĩĐ´ĐŊŅŅ ŅŅŅĐžĐēĐ° в ŅаСдĐĩĐģĐĩ ŅŅĐ°ĐŊСаĐēŅии ĐžĐŋиŅŅваĐĩŅ ŅаСŅĐĩŅĐ°ŅŅĐĩĐĩ ŅŅĐ°ĐŊСаĐēŅиŅ ŅŅĐģОвиĐĩ.
#ĐĐĩŅĐĩĐŧĐĩĐŊĐŊŅĐĩ ŅŅĐ°ĐŊСаĐēŅии Đ´ĐžĐģĐļĐŊŅ иĐŧĐĩŅŅ СĐŊĐ°ŅĐĩĐŊиŅ 1 иĐģи 0, вŅĐĩ ОйŅĐĩĐēŅŅ Đ´ĐžĐģĐļĐŊŅ
#ĐąŅŅŅ в ĐąĐĩСОĐŋĐ°ŅĐŊĐžŅŅи, Đ° ŅĐĩŅĐŧĐĩŅ Đ´ĐžĐģĐļĐĩĐŊ ĐŋĐĩŅĐĩĐŋĐģŅваŅŅ ŅĐĩĐēŅ в ОдиĐŊĐžŅĐēŅ
#иĐģи Ņ ĐēĐĩĐŧ-ŅĐž ĐŊĐ° ĐēĐ°ĐļĐ´ĐžĐŧ ŅĐ°ĐŗŅ
side && safe && humanTravel && objectTravel
case s:TransferTransaction =>
#ĐĸŅĐ°ĐŊСаĐēŅиŅ вŅвОда ŅŅĐĩĐ´ŅŅв ŅаСŅĐĩŅĐĩĐŊĐ° ŅĐžĐģŅĐēĐž в ŅĐģŅŅĐ°Đĩ ĐĩŅĐģи вŅĐĩ ĐŋĐĩŅĐĩĐŋĐģŅĐģи ĐŊĐ° Đ´ŅŅĐŗОК ĐąĐĩŅĐĩĐŗ
human == 1 && wolf == 1 && goat == 1 && cabbage == 1
#ĐŅĐĩ ĐŋŅĐžŅиĐĩ ŅиĐŋŅ ŅŅĐ°ĐŊСаĐēŅиК СаĐŋŅĐĩŅĐĩĐŊŅ
case _ => false
}
āĻĒāĻŋāĻāĻāĻāĻĒāĻŋ āĻĒā§āĻ°āĻĨāĻŽā§ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻ āĻāĻ¨ā§āĻā§āĻ°āĻžāĻā§āĻ āĻĨā§āĻā§ āĻ¤āĻžāĻĻā§āĻ° āĻā§ āĻāĻŦāĻ āĻ¸āĻāĻļā§āĻ˛āĻŋāĻˇā§āĻ āĻŦā§āĻ˛āĻŋāĻ¯āĻŧāĻžāĻ¨ āĻāĻā§āĻ¸āĻĒā§āĻ°ā§āĻļāĻ¨ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ā§āĻ° āĻāĻāĻžāĻ°ā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ āĻŦā§āĻ° āĻāĻ°ā§āĨ¤
cabbage: extract ( getInteger ( contract , "cabbage" ) )
goat: extract ( getInteger ( contract , "goat" ) )
human: extract ( getInteger ( contract , "human" ) )
wolf: extract ( getInteger ( contract , "wolf" ) )
fState: human== 1 && wolf== 1 && goat== 1 && cabbage== 1
fState:
wolf:
goat:
cabbage:
cabbageSide: cabbage== 0 || cabbage== 1
human: extract ( getInteger ( contract , "human" ) )
newGoat: extract ( getInteger ( t.data , "goat" ) )
newHuman: extract ( getInteger ( t.data , "human" ) )
goatSide: goat== 0 || goat== 1
humanSide: human== 0 || human== 1
t7: humanTravel && newWolf== wolf && newGoat== goat && newCabbage== cabbage
t3: humanTravel && newWolf== wolf && newGoat== goat && newCabbage== cabbage + 1
t6: humanTravel && newWolf== wolf && newGoat== goat && newCabbage== cabbage - 1
t2: humanTravel && newWolf== wolf && newGoat== goat + 1 && newCabbage== cabbage
t5: humanTravel && newWolf== wolf && newGoat== goat - 1 && newCabbage== cabbage
t1: humanTravel && newWolf== wolf + 1 && newGoat== goat && newCabbage== cabbage
t4: humanTravel && newWolf== wolf - 1 && newGoat== goat && newCabbage== cabbage
safeAlone: newGoat != newWolf && newGoat != newCabbage
wolfSide: wolf== 0 || wolf== 1
humanTravel: human != newHuman
side: humanSide && wolfSide && goatSide && cabbageSide
safe: safeAlone || newGoat== newHuman
objectTravel: t1 || t2 || t3 || t4 || t5 || t6 || t7
PHP āĻ¤āĻžāĻ°āĻĒāĻ° Python-āĻ āĻāĻāĻāĻŋ Z3Prover SMT-āĻ¸āĻžāĻŽāĻā§āĻāĻ¸ā§āĻ¯āĻĒā§āĻ°ā§āĻŖ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§āĻ° āĻŦāĻŋāĻŦāĻ°āĻŖā§ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻāĻ°ā§āĨ¤
āĻĄā§āĻāĻž āĻāĻāĻāĻŋ āĻ˛ā§āĻĒā§ āĻŽā§āĻĄāĻŧāĻžāĻ¨ā§ āĻšāĻ¯āĻŧ, āĻ¯ā§āĻāĻžāĻ¨ā§ āĻ¸ā§āĻā§āĻ°ā§āĻ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛āĻā§āĻ˛āĻŋ āĻ¸ā§āĻā§ i āĻĒāĻžāĻ¯āĻŧ, āĻ˛ā§āĻ¨āĻĻā§āĻ¨ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛āĻā§āĻ˛āĻŋ āĻ¸ā§āĻāĻ i + 1 āĻāĻŦāĻ āĻ
āĻāĻŋāĻŦā§āĻ¯āĻā§āĻ¤āĻŋ āĻ¸āĻš āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛āĻā§āĻ˛āĻŋ āĻĒā§āĻ°ā§āĻŦāĻŦāĻ°ā§āĻ¤ā§ āĻ
āĻŦāĻ¸ā§āĻĨāĻž āĻĨā§āĻā§ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻ
āĻŦāĻ¸ā§āĻĨāĻžāĻ¤ā§ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ°ā§āĻ° āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻ¸ā§āĻ āĻāĻ°ā§āĨ¤
āĻāĻāĻŋ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§āĻļāĻŋāĻ¨ā§āĻ° āĻā§āĻŦ āĻšā§āĻĻāĻ¯āĻŧ, āĻ¯āĻž āĻāĻāĻāĻŋ āĻŦāĻšā§-āĻ˛ā§āĻ¨āĻĻā§āĻ¨ āĻ āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§āĨ¤
fState: And( And( And( human[Steps] == 1 , wolf[Steps] == 1 ) , goat[Steps] == 1 ) , cabbage[Steps] == 1 )
final: fState[Steps]
fState:
wolf:
goat:
cabbage:
cabbageSide: Or( cabbage[i] == 0 , cabbage[i] == 1 )
goatSide: Or( goat[i] == 0 , goat[i] == 1 )
humanSide: Or( human[i] == 0 , human[i] == 1 )
t7: And( And( And( humanTravel[i] , wolf == wolf[i] ) , goat[i+1] == goat[i] ) , cabbage == cabbage[i] )
t3: And( And( And( humanTravel[i] , wolf == wolf[i] ) , goat[i+1] == goat[i] ) , cabbage == cabbage[i] + 1 )
t6: And( And( And( humanTravel[i] , wolf == wolf[i] ) , goat[i+1] == goat[i] ) , cabbage == cabbage[i] - 1 )
t2: And( And( And( humanTravel[i] , wolf == wolf[i] ) , goat[i+1] == goat[i] + 1 ) , cabbage == cabbage[i] )
t5: And( And( And( humanTravel[i] , wolf == wolf[i] ) , goat[i+1] == goat[i] - 1 ) , cabbage == cabbage[i] )
t1: And( And( And( humanTravel[i] , wolf == wolf[i] + 1 ) , goat[i+1] == goat[i] ) , cabbage == cabbage[i] )
t4: And( And( And( humanTravel[i] , wolf == wolf[i] - 1 ) , goat[i+1] == goat[i] ) , cabbage == cabbage[i] )
safeAlone: And( goat[i+1] != wolf , goat[i+1] != cabbage )
wolfSide: Or( wolf[i] == 0 , wolf[i] == 1 )
humanTravel: human[i] != human[i+1]
side: And( And( And( humanSide[i] , wolfSide[i] ) , goatSide[i] ) , cabbageSide[i] )
safe: Or( safeAlone[i] , goat[i+1] == human[i+1] )
objectTravel: Or( Or( Or( Or( Or( Or( t1[i] , t2[i] ) , t3[i] ) , t4[i] ) , t5[i] ) , t6[i] ) , t7[i] )
data: And( And( And( side[i] , safe[i] ) , humanTravel[i] ) , objectTravel[i] )
āĻļāĻ°ā§āĻ¤āĻā§āĻ˛āĻŋ āĻ¸āĻžāĻāĻžāĻ¨ā§ āĻšāĻ¯āĻŧā§āĻā§ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻā§āĻŽāĻĒā§āĻ˛ā§āĻā§ āĻ¸āĻ¨ā§āĻ¨āĻŋāĻŦā§āĻļ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§ āĻ¯āĻž āĻĒāĻžāĻāĻĨāĻ¨ā§ SMT āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĄāĻŋāĻāĻžāĻāĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§āĨ¤
āĻĢāĻžāĻāĻāĻž āĻā§āĻŽāĻĒā§āĻ˛ā§āĻ
import json
from z3 import *
s = Solver()
Steps=7
Num= Steps+1
$code$
#template, only start rest
s.add(data + start)
#template
s.add(final)
ind = 0
f = open("/var/www/html/all/bin/python/log.txt", "a")
while s.check() == sat:
ind = ind +1
print ind
m = s.model()
print m
print "traversing model..."
#for d in m.decls():
#print "%s = %s" % (d.name(), m[d])
f.write(str(m))
f.write("nn")
exit()
#s.add(Or(goat[0] != s.model()[data[0]] )) # prevent next model from using the same assignment as a previous model
print "Total solution number: "
print ind
f.close()
āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻā§āĻāĻ¨ā§āĻ° āĻļā§āĻˇ āĻ āĻŦāĻ¸ā§āĻĨāĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻā§āĻ°āĻžāĻ¨ā§āĻ¸āĻĢāĻžāĻ° āĻ˛ā§āĻ¨āĻĻā§āĻ¨ āĻŦāĻŋāĻāĻžāĻā§ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻž āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻā§āĻ˛āĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤
āĻāĻ° āĻŽāĻžāĻ¨ā§ āĻšāĻ˛ āĻ¯ā§ Z3Prover āĻ¸ā§āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻāĻāĻžāĻŦā§ āĻāĻŽāĻ¨ āĻļāĻ°ā§āĻ¤āĻā§āĻ˛āĻŋāĻ° āĻ¸ā§āĻāĻā§āĻ˛āĻŋ āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻāĻ°āĻŦā§ āĻ¯āĻž āĻļā§āĻˇ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻā§āĻā§āĻ¤āĻŋ āĻĨā§āĻā§ āĻ¤āĻšāĻŦāĻŋāĻ˛ āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻ āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻŦā§āĨ¤
āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻŽāĻ°āĻž āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻā§āĻ¤āĻŋāĻ° āĻāĻāĻāĻŋ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻāĻžāĻ°ā§āĻ¯āĻāĻ°ā§ SMT āĻŽāĻĄā§āĻ˛ āĻĒāĻžāĻāĨ¤
āĻāĻĒāĻ¨āĻŋ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻā§āĻā§āĻ¨ āĻ¯ā§ āĻāĻāĻŋ āĻāĻŽāĻžāĻ° āĻāĻā§āĻ° āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§āĻ° āĻŽāĻĄā§āĻ˛ā§āĻ° āĻ¸āĻžāĻĨā§ āĻā§āĻŦ āĻŽāĻŋāĻ˛, āĻ¯āĻž āĻāĻŽāĻŋ āĻ¨āĻŋāĻā§ āĻāĻŽā§āĻĒāĻžāĻāĻ˛ āĻāĻ°ā§āĻāĻŋāĨ¤
āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻā§āĻŽāĻĒā§āĻ˛ā§āĻ
import json
from z3 import *
s = Solver()
Steps=7
Num= Steps+1
human = [ Int('human_%i' % (i + 1)) for i in range(Num) ]
wolf = [ Int('wolf_%i' % (i + 1)) for i in range(Num) ]
goat = [ Int('goat_%i' % (i + 1)) for i in range(Num) ]
cabbage = [ Int('cabbage_%i' % (i + 1)) for i in range(Num) ]
nothing= [ And( human[i] == human[i+1], wolf[i] == wolf[i+1], goat[i] == goat[i+1], cabbage[i] == cabbage[i+1] ) for i in range(Num-1) ]
start= [ human[0] == 1, wolf[0] == 0, goat[0] == 1, cabbage[0] == 0 ]
safeAlone= [ And( goat[i+1] != wolf[i+1] , goat[i+1] != cabbage[i+1] ) for i in range(Num-1) ]
safe= [ Or( safeAlone[i] , goat[i+1] == human[i+1] ) for i in range(Num-1) ]
humanTravel= [ human[i] != human[i+1] for i in range(Num-1) ]
cabbageSide= [ Or( cabbage[i] == 0 , cabbage[i] == 1 ) for i in range(Num-1) ]
goatSide= [ Or( goat[i] == 0 , goat[i] == 1 ) for i in range(Num-1) ]
humanSide= [ Or( human[i] == 0 , human[i] == 1 ) for i in range(Num-1) ]
t7= [ And( And( And( humanTravel[i] , wolf[i+1] == wolf[i] ) , goat[i+1] == goat[i] ) , cabbage[i+1] == cabbage[i] ) for i in range(Num-1) ]
t3= [ And( And( And( humanTravel[i] , wolf[i+1] == wolf[i] ) , goat[i+1] == goat[i] ) , cabbage[i+1] == cabbage[i] + 1 ) for i in range(Num-1) ]
t6= [ And( And( And( humanTravel[i] , wolf[i+1] == wolf[i] ) , goat[i+1] == goat[i] ) , cabbage[i+1] == cabbage[i] - 1 ) for i in range(Num-1) ]
t2= [ And( And( And( humanTravel[i] , wolf[i+1] == wolf[i] ) , goat[i+1] == goat[i] + 1 ) , cabbage[i+1] == cabbage[i] ) for i in range(Num-1) ]
t5= [ And( And( And( humanTravel[i] , wolf[i+1] == wolf[i] ) , goat[i+1] == goat[i] - 1 ) , cabbage[i+1] == cabbage[i] ) for i in range(Num-1) ]
t1= [ And( And( And( humanTravel[i] , wolf[i+1] == wolf[i] + 1 ) , goat[i+1] == goat[i] ) , cabbage[i+1] == cabbage[i] ) for i in range(Num-1) ]
t4= [ And( And( And( humanTravel[i] , wolf[i+1] == wolf[i] - 1 ) , goat[i+1] == goat[i] ) , cabbage[i+1] == cabbage[i] ) for i in range(Num-1) ]
wolfSide= [ Or( wolf[i] == 0 , wolf[i] == 1 ) for i in range(Num-1) ]
side= [ And( And( And( humanSide[i] , wolfSide[i] ) , goatSide[i] ) , cabbageSide[i] ) for i in range(Num-1) ]
objectTravel= [ Or( Or( Or( Or( Or( Or( t1[i] , t2[i] ) , t3[i] ) , t4[i] ) , t5[i] ) , t6[i] ) , t7[i] ) for i in range(Num-1) ]
data= [ Or( And( And( And( side[i] , safe[i] ) , humanTravel[i] ) , objectTravel[i] ) , nothing[i]) for i in range(Num-1) ]
fState= And( And( And( human[Steps] == 1 , wolf[Steps] == 1 ) , goat[Steps] == 1 ) , cabbage[Steps] == 1 )
final= fState
#template, only start rest
s.add(data + start)
#template
s.add(final)
ind = 0
f = open("/var/www/html/all/bin/python/log.txt", "a")
while s.check() == sat:
ind = ind +1
print ind
m = s.model()
print m
print "traversing model..."
#for d in m.decls():
#print "%s = %s" % (d.name(), m[d])
f.write(str(m))
f.write("nn")
exit()
#s.add(Or(goat[0] != s.model()[data[0]] )) # prevent next model from using the same assignment as a previous model
print "Total solution number: "
print ind
f.close()
āĻ˛āĻā§āĻā§āĻ° āĻĒāĻ°ā§, Z3Prover āĻ¸ā§āĻŽāĻžāĻ°ā§āĻ āĻā§āĻā§āĻ¤āĻŋāĻ° āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻ°ā§ āĻāĻŦāĻ āĻāĻŽāĻžāĻĻā§āĻ°āĻā§ āĻ˛ā§āĻ¨āĻĻā§āĻ¨ā§āĻ° āĻāĻāĻāĻŋ āĻļā§āĻā§āĻāĻ˛ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§ āĻ¯āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻ¤āĻšāĻŦāĻŋāĻ˛ āĻāĻ¤ā§āĻ¤ā§āĻ˛āĻ¨ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧ:
Winning transaction chain found:
Data transaction: human= 0, wolf= 0, goat= 1, cabbage= 0
Data transaction: human= 1, wolf= 0, goat= 1, cabbage= 1
Data transaction: human= 0, wolf= 0, goat= 0, cabbage= 1
Data transaction: human= 1, wolf= 1, goat= 0, cabbage= 1
Data transaction: human= 0, wolf= 1, goat= 0, cabbage= 1
Data transaction: human= 1, wolf= 1, goat= 1, cabbage= 1
Data transaction: human= 1, wolf= 1, goat= 1, cabbage= 1
Transfer transaction
āĻĢā§āĻ°āĻŋ āĻā§āĻā§āĻ¤āĻŋ āĻāĻžāĻĄāĻŧāĻžāĻ, āĻāĻĒāĻ¨āĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻ¨āĻŋāĻā§āĻ° āĻā§āĻā§āĻ¤āĻŋ āĻ¨āĻŋāĻ¯āĻŧā§ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻŦāĻž āĻāĻ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻāĻŋ āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨, āĻ¯āĻž 2āĻāĻŋ āĻ˛ā§āĻ¨āĻĻā§āĻ¨ā§ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤
let contract = tx.sender
let a= extract(getInteger(contract,"a"))
let b= extract(getInteger(contract,"b"))
let c= extract(getInteger(contract,"c"))
let d= extract(getInteger(contract,"d"))
match tx {
case t:DataTransaction =>
let na= extract(getInteger(t.data,"a"))
let nb= extract(getInteger(t.data,"b"))
let nc= extract(getInteger(t.data,"c"))
let nd= extract(getInteger(t.data,"d"))
nd == 0 || a == 100 - 5
case s:TransferTransaction =>
( a + b - c ) * d == 12
case _ => true
}
āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻāĻŋ āĻĒā§āĻ°āĻĨāĻŽ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ, āĻ¤āĻžāĻ āĻ¸āĻŋāĻ¨āĻā§āĻ¯āĻžāĻā§āĻ¸ āĻā§āĻŦāĻ āĻ¸ā§āĻŽāĻŋāĻ¤ āĻāĻŦāĻ āĻŦāĻžāĻ āĻĨāĻžāĻāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻā§āĻ˛āĻŋāĻ¤ā§, āĻāĻŽāĻŋ VM-āĻāĻ° āĻāĻ°āĻ āĻāĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ āĻāĻāĻžāĻ° āĻāĻ°āĻžāĻ° āĻĒāĻ°āĻŋāĻāĻ˛ā§āĻĒāĻ¨āĻž āĻāĻ°āĻāĻŋ, āĻāĻŦāĻ āĻā§āĻāĻžāĻŦā§ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻŋāĻ° āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ā§ āĻāĻ¨ā§āĻˇā§āĻ āĻžāĻ¨āĻŋāĻāĻāĻžāĻŦā§ āĻ¯āĻžāĻāĻžāĻāĻā§āĻ¤ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻ āĻā§āĻā§āĻ¤āĻŋāĻā§āĻ˛āĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻ¤āĻž āĻĻā§āĻāĻžāĻ¨ āĻāĻŦāĻ āĻā§āĻŦāĻ˛ āĻ¸ā§āĻā§āĻ˛āĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻ°āĻŦā§āĻ¨ āĻ¨āĻžāĨ¤
āĻ
āĻā§āĻˇāĻ° āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§āĻļāĻŋāĻ¨ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻ¯āĻŧ
āĻ¸āĻŋāĻŽā§āĻŦāĻ˛āĻŋāĻ āĻāĻŋāĻāĻŽ-āĻāĻ° āĻ¸ā§āĻ°ā§āĻ¸ āĻā§āĻĄāĻāĻŋ āĻā§āĻ°āĻŽāĻžāĻ¨ā§āĻ¸āĻžāĻ°ā§ āĻ°āĻžāĻāĻžāĻ° āĻāĻŦāĻ āĻ¸ā§āĻāĻžāĻ¨ā§ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻ¯ā§āĻ āĻāĻ°āĻžāĻ° āĻĒāĻ°ā§, āĻāĻŽāĻŋ āĻŦāĻŋāĻ¨āĻžāĻŽā§āĻ˛ā§āĻ¯ā§ āĻ
ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻŋāĻā§ āĻāĻŋāĻāĻšāĻžāĻŦā§ āĻ°āĻžāĻāĻžāĻ° āĻĒāĻ°āĻŋāĻāĻ˛ā§āĻĒāĻ¨āĻž āĻāĻ°āĻāĻŋāĨ¤
āĻāĻ¤ā§āĻ¸: www.habr.com