рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдирдП рдкреНрд░рдХрд╛рд░ рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдЙрдирдХреЗ рдореВрд▓реНрдпреЛрдВ рдкрд░ рдХрд╛рд░реНрдп рдХрд░реЗрдВред рдЗрд╕ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдХреЗ рд╡рд┐рд╖рдпреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдФрд░ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧрдордирд╛рддреНрдордХ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рдКрдВрдЧрд╛ред
рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдерд╛ рдХрд┐ Coq рдореЗрдВ рдмреИрдЯрд░реА рдирд╣реАрдВ рд╣реИрдВред рджрд░рдЕрд╕рд▓, рдореИрдВ рдЪрд╛рд▓рд╛рдХ рдерд╛ - рдХреЛрдХ рдХреЗ рдкрд╛рд╕ рдПрдХ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рдЙрдкрдпреЛрдЧреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рд╣реИрдВред рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдХреБрдЫ рдФрд░ рднреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рд╣рдо рдЕрднреА рдирд┐рд╡рд╛рд╕ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред
CoIDEIDE рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдХреБрдЫ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдорд┐рддреНрд░ рдмрди рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рд╕реВрдЪреА
Print Libraries
рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЗрдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:
рднрд░реА рд╣реБрдИ рдФрд░ рдЖрдпрд╛рддрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдлрд╛рдЗрд▓реЗрдВ:
Coq.Init.Notations
Coq.Init.Logic
Coq.Init.Datatypes
Coq.Init.Specif
Coq.Init.Peano
Coq.Init.Wf
Coq.Init.Tactics
Coq.Init.Prelude
Coq.Init.Logic_Type
рд╢реИрдХреНрд╖рдгрд┐рдХ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкрд░ рдХреЛрдИ рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ рд▓реЗрдЦ рддрдереНрдп рдХреА рдЧрдгрдирд╛ рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдЗрд╕ рдкрд░рдВрдкрд░рд╛ рд╕реЗ рд╡рд┐рджрд╛ рдирд╣реАрдВ рд▓реЗрдВрдЧреЗ рдФрд░ рдкреНрд░реЗрд░рдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рддрдереНрдп рдХреЛ рд▓рд┐рдЦреЗрдВрдЧреЗред
рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╕рдВрдЦреНрдпрд╛
рдЧрдгрд┐рдд рдореЗрдВ рд╣рд░ рдЬрдЧрд╣ рдкреНрд░реЗрд░рдХ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рдкрд╛рдИ рдЬрд╛рддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реЗрдЯ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдПрдВ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкреЗрд╢ рдХреА рдЧрдИ рд╣реИрдВ:
&space;=&space;n&space;\cup&space;\left&space;\{&space;n&space;\right&space;\})
рдЗрд╕реА рддрд░рд╣, рд╣рдо Coq рдореЗрдВ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдирд╛рдо рд╕реНрдерд╛рди рдХреЛ рд░реЛрдХрдирд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдореЙрдбреНрдпреВрд▓ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
рдореЙрдбреНрдпреВрд▓ рдЯреЗрд╕реНрдЯ 1ред
рдЖрдЧрдордирд╛рддреНрдордХ рдирдЯ: рдкреНрд░рдХрд╛рд░: =
| рдУ: рдирдЯ
| рд╕: рдирдЯ -> рдирдЯред
рдЗрд╕ рдШреЛрд╖рдгрд╛ рдХреЛ рдЗрд╕ рддрд░рд╣ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдП:
- O рдПрдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рд╣реИ,
- S рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реИ рдЬреЛ рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреВрд░реНрдгрд╛рдВрдХ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдФрд░ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреВрд░реНрдгрд╛рдВрдХ рд▓реМрдЯрд╛рддрд╛ рд╣реИ: рдпрджрд┐ n construct N, рддреЛ S n тИИ Nред
рдЗрд╕ рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдХрд┐рд╕реА рднреА рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
(рдПрд╕рдУ) рдореЗрдВ рд╕рд░рд▓ рд╕рд╛рдХреНрд╖реНрдпред
(* ==> 1: nat *)
рдореЗрдВ рд╕рд░рд▓ (рдПрд╕ (рдПрд╕рдУ))ред
(* ==> 2: nat *)
рдореЗрдВ рд╕рд░рд▓ (рдПрд╕ (рдПрд╕ (рдПрд╕рдУ)))ред
(* ==> 3: nat *)
рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдПрдВ рд╣реИрдВ, рддреЛ рдЗрди рд╕рдВрдЦреНрдпрд╛рдУрдВ рдкрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ:
рдлрд╝рд┐рдХреНрд╕рдкреЙрдЗрдВрдЯ рдкреНрд▓рд╕ (n: nat) (m: nat): nat: =
n рдХреЗ рд╕рд╛рде рдореИрдЪ
| рдУ => рдо
| S n '=> S (рдкреНрд▓рд╕ n' m)
рдЕрдВрддред
рдпрд╣рд╛рдВ рд╣рдордиреЗ рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА (
Fixpoint
рдХреАрд╡рд░реНрдб)
plus
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рджреЛ
nat
рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЯрд╛рдЗрдк
Fixpoint
рдПрдХ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ
Check
рдХрдорд╛рдВрдб рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдкреНрд▓рд╕ рдЪреЗрдХ рдХрд░реЗрдВред
(* ==> рдкреНрд▓рд╕: рдиреЗрдЯ -> рдиреЗрдЯ -> рдиреЗрдЯ *)
рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдЙрд╕рдХреЗ рдХрд╛рдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рд╣рдо рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 3 + 2 рдХреЗ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ:
((рдПрд╕ (рдПрд╕ (рдПрд╕))) (рдПрд╕ (рдПрд╕рдУ))) рдореЗрдВ рд╕рд░рд▓ рд╕рд╛рдХреНрд╖реНрдпред
(* ==> 5: nat *)
рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ?
(* рдкреНрд▓рд╕ (рдПрд╕ (рдПрд╕ (рдПрд╕рдУ))) (рдПрд╕ (рдПрд╕рдУ))
==> рдПрд╕ (рдкреНрд▓рд╕ (рдПрд╕ (рдПрд╕рдУ)) (рдПрд╕ (рдПрд╕рдУ)) рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рджреВрд╕рд░рд╛ рдЦрдВрдб
==> рдПрд╕ (рдПрд╕ (рдкреНрд▓рд╕ (рдПрд╕рдУ) (рдПрд╕ (рдПрд╕рдУ)))) рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рджреВрд╕рд░рд╛ рдЦрдВрдб
==> рдПрд╕ (рдПрд╕ (рдПрд╕ (рдкреНрд▓рд╕ рдУ (рдПрд╕))))) рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рджреВрд╕рд░рд╛ рдЦрдВрдб
==> рдПрд╕ (рдПрд╕ (рдПрд╕ (рдПрд╕ (рдПрд╕)))) рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдкрд╣рд▓рд╛ рдЦрдВрдб рд╣реИ
*)
рдЗрд╕реА рддрд░рд╣ рд╕реЗ, рдЖрдк рдПрдХ рдЧреБрдгрди рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рддрдереНрдпрд╛рддреНрдордХ рдЧрдгрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд┐рдирд╛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкрд░ рдПрдХ рднреА рдкрд╛рдареНрдпрдкреБрд╕реНрддрдХ рдирд╣реАрдВ рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:
рдлрд┐рдХреНрд╕ рдкреЙрдЗрдВрдЯ рдорд▓реНрдЯреА (nm: nat): nat: =
n рдХреЗ рд╕рд╛рде рдореИрдЪ
| рдУ => рдУ
| S n '=> рдкреНрд▓рд╕ m (рдмрд╣реБ n' m)
рдЕрдВрддред
рдирд┐рдпрддрд╛рдВрдХ рддрдереНрдп (n: nat): nat: =
n рдХреЗ рд╕рд╛рде рдореИрдЪ
| рдУ => рдПрд╕рдУ
| S n '=> рдмрд╣реБ n (рднрд╛рдЬреНрдп n')
рдЕрдВрддред
рдореЗрдВ рд╕рд░рд▓ (рддрдереНрдпрд╛рддреНрдордХ (рдПрд╕ (рдПрд╕ (рдПрд╕ (рдПрд╕ (рдПрд╕)))))))ред
(* ==> 120: nat *)
рдирд┐рд╖реНрдХрд░реНрд╖
рд╕рд╛рдордЧреНрд░реА рдХреЛ рдордЬрдмреВрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдкрд╛рдардХ рдХреЛрдХрд╛рдЗрдб рдореЗрдВ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЪрд▓рд╛рдПрдВред рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдореВрд▓ Coq рд░рдгрдиреАрддрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рдЬрд╛рд░реА рд░рдЦрд╛ рдЬрд╛рдП ред