Amn ورعاية الرياضيات
-
19-09-2019 - |
سؤال
لست متأكدا من أن هذا مناسب ل Stackoverflow، لكنني لا أعرف أين أسأله. أنا أدرس طريقة B لإثبات المواصفات في متطلبات المواصفات، ولدي مشكلة في تدوين الرياضيات المنطقية عند تحديد الشروط المسبقة للعمليات.
تبسيط المشكلة الأصلية، لدي متغير وهو مجموعة فرعية الرحلات الجوية من المنتج الديكارتي بين Trainer_NO X الوقت X X، حيث بالنسبة لكل عضو (لا، TD، TA)، لا يعني عدد الرحلة، TD وقت المغادرة و TME TME من الوصول. كيف يمكنني الحصول عليها، باستخدام تدوين منطق الرياضيات، عنصر الرحلات الجوية التي لديها أكبر قيمة TD؟
المحلول
هل تريد ان احصل على مثل هذا العنصر، أو ل اختبار أن العنصر الذي لديك يرضي هذه الخاصية؟ أنا أسأل لأن الثانية تبدو شرطا مسبقا معقولة للعملية. أنا لا أعرف طريقة B على وجه التحديد؛ لقد بحثت في بعض المستندات، ولكن لا يمكنني العثور على مرجع سريع، لذلك قد يكون هذا خطأ في بعض التفاصيل.
الثانية يجب أن تبدو وكأنها (prj2
يستخدم الإسقاط الثاني):
HasGreatestTd(flight) = flight \in flights \and \forall flight' (flight' \in flights => prj2(flight) >= prj2(flight'))
ثم الأول هو:
flightWithGreatestTd = choice({flight | HasGreatestTd(flight)})
نصائح أخرى
سامح جهلي، أنا لست على دراية طريقة B. ولكن لم أستطع استخدام كمية التفرد؟ يبدو أنه يبدو مثل:
يوجد وقت td بحيث بالنسبة إلى كل الأوقات TD '، TD> TD'
و
لجميع TD، TD '، TD' '، إذا كان TD> TD' 'و TD'> TD '' ثم TD == TD '
هذا، بالطبع، يفترض أن هناك عنصر واحد بالضبط في المجموعة. لا أستطيع أن أقول حقا ما إذا كانت طريقة B تسمح للطاقة الكاملة لمنطق الطلب الأول ولكن أفترض أنك يمكن أن تقترب من ذلك.
من الممكن تحديد الوظائف الموجودة في B. وظائف لها قيم ثابتة ويتم سردها في جملة Abstress_constants، ومع تحديدها في جملة الخصائص. أحاول شرح كيف يمكنك استخدام هذا البناء لحل مشكلتك.
يتبع مقتطفات صغيرة حيث
- يتم تقديم اختصار للمنتج الكرداني إعطاء معلومات الطيران؛
DEFINITIONS FLIGHT_INFO == FLIGHT_NO * TIME * TIME
- يتم الإعلان عن أربعة ثوابت، أول ثلاثة "مسافرون"، وآخر خرائط مجموعة غير فارغة من معلومات الطيران إلى معلومات الطيران مع أكبر وقت المغادرة.
CONSTANTS flight_no, flight_departure, flight_arrival, last_flight
- ثم يتم كتابة هذه الثوابت وتحديدها كوظائف إجمالية. لاحظ أن الوظيفة الأخيرة يجب أن تأخذ كدخل مجموعة غير فارغة. اعتدت هنا على مناهج مختلفة لتحديد هذه الوظائف. واحد هو تعريف (مع المساواة)، والآخر هو البديهية.
PROPERTIES // typing flight_no: FLIGHT_INFO --> FLIGHT_NO & flight_departure: FLIGHT_INFO --> TIME & flight_arrival: FLIGHT_INFO --> TIME & last_flight : POW1(FLIGHT_INFO) --> FLIGHT_INFO & // value flight_no = %(no, dt, at).(no |-> dt |-> at : FLIGHT_INFO | no) & flight_departure = %(no, dt, at).(no |-> dt |-> at : FLIGHT_INFO | dt) & flight_arrival = %(no, dt, at).(no |-> dt |-> at : FLIGHT_INFO | at) & !fs.(fs : POW1(FLIGHT_INFO) => last_flight(fs) : fs & !(fi).(fi : FLIGHT_INFO & fi : fs => flight_departure(fi) <= flight_departure(last_flight(fs)))