לוגיקת זמן

לוגיקת זמן, לוגיקה עתית או לוגיקה טמפורלית (באנגלית: Temporal Logic) היא הרחבה של הלוגיקה הקלאסית המאפשרת ביטויים הקשורים בזמן.
לוגיקת זמן היא חלק מהלוגיקה המודלית.

לוגיקת זמן מאפשרת לעסוק בקו זמן, ועל כן מאפשרת לנסח מתמטית משפטים כמו "אני תמיד רעב", "לבסוף אהיה רעב", או "אהיה רעב עד שאוכל משהו". 
קו הזמן מתחלק לשני סוגים אפשריים: קו זמן ליניארי, שמוגבל לקו זמן אפשרי אחד (כמו בדוגמאות לעיל), וקו זמן מסתעף (Branching logic) שמאפשר לעבוד במספר קווי זמן חלופיים במקביל. בצורה כזו מניחים מראש סביבה לא צפויה שמספר דברים שונים יכולים להתרחש בה. בסביבה כזו ניתן לנסח משפטים כמו: "יש אפשרות שאשאר רעב לנצח" או "יש אפשרות שלבסוף לא אהיה רעב". במידה ואין יודעים אם אי פעם אוכל - שני המשפטים נחשבים נכונים.

אמיר פנואלי זכה בשנת 1996 בפרס טיורינג על הכנסת לוגיקת זמן למדעי המחשב.
כיום נעשה שימוש נרחב בלוגיקת זמן באימות תוכנה כדי להוכיח מתמטית נכונות של מערכת מחשב, זאת להבדיל מתהליך בדיקת תוכנה על ידי בודקי תוכנה אנושיים.

== אופרטורים של לוגיקת זמן ==
לוגיקת זמן מכילה שני סוגי אופרטורים: אופרטורים לוגיים ואופרטורים מודליים.
האופרטורים הלוגיים הם פעולות בוליאניות רגילות (<math>\neg,\lor,\land,\rightarrow</math>). האופרטורים המודליים שמשתמשים בהם בלוגיקת זמן מוגדרים כך:

{| border="1" cellspacing="0" cellpadding="2" style="border-collapse: collapse;"
|-
| style="background:#efefef;" | טקסטואלי
| style="background:#efefef;" | סימול
| style="background:#efefef;" | הגדרה
| style="background:#efefef;" | הסבר
| style="background:#efefef;" | תרשים
|-
| colspan="4" align="center" | אופרטורים בינאריים
|-
|<math>\phi</math> U <math>\psi</math>
|<math>\phi ~\mathcal{U}~ \psi</math>
|<math>\begin{matrix}(B\,\mathcal{U}\,C)(\phi)= \\ (\exists i:C(\phi_i)\land(\forall j<i:B(\phi_j)))\end{matrix}</math>
|
<math>\phi</math> מתקיים עד ש- <math>\psi</math> מתקיים:
<math>\psi</math> מתקיים בנקודת הזמן הנוכחית או בנקודת זמן עתידית, ועד נקודת זמן זו <math>\phi</math> חייב להתקיים. מנקודת הזמן בה <math>\psi</math> מתקיים, <math>\phi</math> כבר לא חייב להתקיים.
|<timeline>
ImageSize = width:240 height:94
PlotArea = left:30 bottom:30 top:0 right:20
DateFormat = x.y
Period = from:0 till:6
TimeAxis = orientation:horizontal
AlignBars = justify
ScaleMajor = gridcolor:black increment:1 start:0
ScaleMinor = gridcolor:black increment:1 start:0

PlotData=
 bar:p color:red width:10 align:left fontsize:S
 from:1 till:3

 bar:q color:red width:10 align:left fontsize:S
 from:3 till:5

 bar:pUq color:red width:10 align:left fontsize:S
 from:1 till:5
</timeline>
|-
|<math>\phi</math> R <math>\psi</math>
|<math>\phi ~\mathcal{R}~ \psi</math>
|<math>\begin{matrix}(B\,\mathcal{R}\,C)(\phi)= \\ (\forall i:C(\phi_i)\lor(\exists j<i:B(\phi_j)))\end{matrix}</math>
|
<math>\phi</math> משחרר את <math>\psi</math> :
<math>\psi</math> מתקיים עד נקודת הזמן הראשונה בה <math>\phi</math> מתקיים (ואחרי זה <math>\psi</math> יכול להתקיים או לא להתקיים), או ש- <math>\psi</math> מתקיים לנצח אם <math>\phi</math> לא מתקיים לעולם.
|<timeline>
ImageSize = width:240 height:100
PlotArea = left:30 bottom:30 top:0 right:20
DateFormat = x.y
Period = from:0 till:6
TimeAxis = orientation:horizontal
AlignBars = justify
ScaleMajor = gridcolor:black increment:1 start:0
ScaleMinor = gridcolor:black increment:1 start:0

PlotData=
 bar:p color:red width:10 align:left fontsize:S
 from:2 till:4

 bar:q color:red width:10 align:left fontsize:S
 from:1 till:3
 from:5 till:6

 bar:pRq color:red width:10 align:left fontsize:S
 from:1 till:3
 from:5 till:6
</timeline>
|-
| colspan="4" align="center" | אופרטורים אונריים
|-
|N <math>\phi</math>
|<math>\circ \phi</math>
|<math>\mathcal{N}B(\phi_i)=B(\phi_{i+1})</math>
|
<math>\phi</math> מתקיים בנקודת הזמן הבאה.
|<timeline>
ImageSize = width:240 height:60
PlotArea = left:30 bottom:30 top:0 right:20
DateFormat = x.y
Period = from:0 till:6
TimeAxis = orientation:horizontal
AlignBars = justify
ScaleMajor = gridcolor:black increment:1 start:0
ScaleMinor = gridcolor:black increment:1 start:0

PlotData=
 bar:p color:red width:10 align:left fontsize:S
 from:2 till:3
 from:5 till:6

 bar:Np color:red width:10 align:left fontsize:S
 from:1 till:2
 from:4 till:5
</timeline>
|-
|F <math>\phi</math>
|<math>\Diamond \phi</math>
|<math>\mathcal{F}B(\phi)=(true\,\mathcal{U}\,B)(\phi)</math>
|
לבסוף: לבסוף <math>\phi</math> מתקיים. כלומר בהכרח קיימת נקודה עתידית שבה <math>\phi</math> מתקיים.
|<timeline>
ImageSize = width:240 height:60
PlotArea = left:30 bottom:30 top:0 right:20
DateFormat = x.y
Period = from:0 till:6
TimeAxis = orientation:horizontal
AlignBars = justify
ScaleMajor = gridcolor:black increment:1 start:0
ScaleMinor = gridcolor:black increment:1 start:0

PlotData=
 bar:p color:red width:10 align:left fontsize:S
 from:2 till:3
 from:4 till:5

 bar:Fp color:red width:10 align:left fontsize:S
 from:0 till:5
</timeline>
|-
|G <math>\phi</math>
|<math>\Box \phi</math>
|<math>\mathcal{G}B(\phi)=\neg\mathcal{F}\neg B(\phi)</math>
|
תמיד: <math>\phi</math> תמיד מתקיים.
|<timeline>
ImageSize = width:240 height:60
PlotArea = left:30 bottom:30 top:0 right:20
DateFormat = x.y
Period = from:0 till:6
TimeAxis = orientation:horizontal
AlignBars = justify
ScaleMajor = gridcolor:black increment:1 start:0
ScaleMinor = gridcolor:black increment:1 start:0

PlotData=
 bar:p color:red width:10 align:left fontsize:S
 from:1 till:3
 from:4 till:6

 bar:Gp color:red width:10 align:left fontsize:S
 from:4 till:6
</timeline>
|-
|A <math>\phi</math>
|
|<math>\begin{matrix}(\mathcal{A}B)(\psi)= \\ (\forall \phi:\phi_0=\psi\to B(\phi))\end{matrix}</math>
|
<math>\phi</math> מתקיים תמיד בכל נקודות הזמן בכל המסלולים שמתחילים בנקודת זמן זו.
|
|-
|E <math>\phi</math>
|
|<math>\begin{matrix}(\mathcal{E}B)(\psi)= \\ (\exists \phi:\phi_0=\psi\land B(\phi))\end{matrix}</math>
|

קיים לפחות מסלול אחד מנקודת זמן זו שבו <math>\phi</math> מתקיים.
|
|}

סימולים אלטרנטיביים:
* אופרטור R מוחלף לעיתים על ידי הסימון V.
* אופרטור W משמעו U חלש ושקול ל- <math>f U g \lor G f</math>. כלומר <math>\phi ~\mathcal{W}~ \psi</math> משמעו <math>\phi</math> מתקיים עד ש- <math>\psi</math> מתקיים, או ש- <math>\phi</math> ממשיך להתקיים לעולם.

אופרטורים אונריים מוגדרים היטב כאשר (B(<math>\phi</math> מוגדר היטב.
אופרטורים בינאריים מוגדרים היטב כאשר (B(<math>\phi</math> ו- (C(<math>\phi</math> מוגדרים היטב.

== שקילויות ==
להלן מספר שקילויות בלוגיקת זמן שניתן להסיק מההגדרות שניתנו לעיל:
* <math>\Box\Box \phi = \Box \phi</math>
* <math>\Diamond\Diamond\phi = \Diamond\phi</math>
* <math>\phi \rightarrow \Diamond\phi</math>
* <math>\Diamond\Box\Diamond\phi = \Box\Diamond\phi</math>
* <math>\Box\Diamond\Box\phi = \Diamond\Box\phi</math>
* <math>\neg\Box\phi \rightarrow \Diamond\neg\phi</math>
* <math>\neg\Diamond\phi \rightarrow \Box\neg\phi</math>
* <math>\circ\phi \rightarrow \Diamond\phi</math>
* <math>\Diamond\psi \rightarrow \Diamond (\phi ~\mathcal{U}~ \psi)</math>
* <math>\Box\phi \lor \Box\psi \rightarrow \Box(\phi\lor\psi)</math>
* <math>\Box\phi \land \Box\psi = \Box(\phi\land\psi)</math>

== ראו גם ==
* לוגיקה
* לוגיקה מודלית
* אימות תוכנה

==קישורים חיצוניים==

קטגוריה:ערכים שבהם תבנית בריטניקה אינה מתאימה
קטגוריה:לוגיקה