Forma verificationis utens exemplo lupi, hirci et brassicae problematum

Mea sententia, in regione linguae Russicae-interreti, thema verificationis formalis non satis obtecta est, ac praesertim defectus exemplorum simplicium et perspicuorum.

Exemplum ex alieno fonte dabo, et meam solutionem ad lupum, capram et crambe trans fluvium transeundi notam quaestionem addam.

Sed primum quid sit formalis verificationis et cur opus sit paucis dicam.

Solet verificationis formalis significat reprehendo unum programmata vel algorithmus utens alio.

Hoc necessarium est ut programma se habeat sicut expectata et etiam ut securitatem suam curet.

Verificatio formalis potentissima media est vulnerabilitates inveniendi et tollendi: sinit te invenire omnia foramina et cimices in progressione existentes, vel probare non esse.
Notatu dignum est in aliquibus casibus hoc esse impossibile, sicut in problemate 8 reginarum cum tabula latitudinis 1000 quadratorum: totum descendit ad complexionem algorithmicam vel ad problema claudendum.

Utcumque tamen unum ex tribus responsionibus recipietur: propositum est verum, non falsum, vel responsum calculare non potuit.

Si responsionem invenire non potest, saepe fieri potest ut res incertos progressionis partes retractare, earum complexionem algorithmicam minuere, ut definitum sic vel nullum responsum obtineat.

Verificationis et formalis adhibeatur, exempli gratia, in Fenestra nucleo et Darpa adumbrata fucus operandi, ad maximum praesidium in tuto ponendum.

Z3Prover, instrumentum validissimum pro theoremate automated probando et aequatione solvenda utemur.

Porro Z3 aequationes solvit, nec eorum valores violente utentes eligit.
Hoc significat responsionem invenire posse, etiam in casibus ubi 10^100 sunt compositiones optionum input.

Sed hoc solum est de duodecim argumentis input genus Integer, quod saepe in usu occurrit.

Quaestio de reginae VIII (Ex Anglis manual).

Forma verificationis utens exemplo lupi, hirci et brassicae problematum

# We know each queen must be in a different row.
# So, we represent each queen by a single integer: the column position
Q = [ Int('Q_%i' % (i + 1)) for i in range(8) ]

# Each queen is in a column {1, ... 8 }
val_c = [ And(1 <= Q[i], Q[i] <= 8) for i in range(8) ]

# At most one queen per column
col_c = [ Distinct(Q) ]

# Diagonal constraint
diag_c = [ If(i == j,
              True,
              And(Q[i] - Q[j] != i - j, Q[i] - Q[j] != j - i))
           for i in range(8) for j in range(i) ]

solve(val_c + col_c + diag_c)

Z3 currit, solutionem obtinemus;

[Q_5 = 1,
 Q_8 = 7,
 Q_3 = 8,
 Q_2 = 2,
 Q_6 = 3,
 Q_4 = 6,
 Q_7 = 5,
 Q_1 = 4]

Quaestio regina comparabilis est cum programmate quod accipit pro coordinatis 8 reginarum et outputis responsionis utrum reginae se invicem verberant.

Si talem programma solveremus verificationem formalem utentem, tum ad problema comparandum, simpliciter unum gradum acciperemus in forma convertendi codicem programmatis in aequationem: eveniret ut essentialiter idem cum nostris esset. sane si recte programmata scripta sunt).

Fere idem fiet in casu ad vulnerabilitates quaerendas: condiciones modo propositae quae nobis necessariae sunt, verbi gratia, tesserae admin, in aequationibus cum verificatione principium vel codicem deformatum transformabimus, et tunc respondebimus quidnam notitia ad propositum assequendum supplendum est.

Opinor, quaestio de lupo, hirco et brassica multo magis iucunda est, cum solvendo iam multos (7) gradus requirit.

Si regina problema comparabilis est casui ubi servo uno GET vel POST petitio penetrare potest, tunc lupus, capra et brassica exemplum demonstrat ex multo magis complexu et diffuso praedicamento, in quo finis tantum effici potest. pluribus precibus.

Hoc comparandum est, exempli gratia, missioni ubi debes invenire iniectionem SQL, lima per illam scribe, deinde iura tua eleva et tunc demum tesseram accipe.

Conditiones quaestionis et solutionis eiusAgricola lupum, capellam et brassicam trans flumen transportare debet. Agricola navem habet quae unum solum accommodare potest, praeter ipsum agricola. Lupus capellam edet, et hircus brassicam, si rusticus incomitata relinquat.

Solutio est quod gradatim 4 opus est agricola caprum recipere.
Nunc incipiamus programmatice solvendo.

Sit scriptor agricola, lupus, caper et brassica sicut 4 variabiles, quae valorem tantum 0 vel 1. Accipiunt: Nulla significat quod sint in sinistra ripa, et unum significat quod sunt ad dextram.

import json
from z3 import *
s = Solver()
Num= 8

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) ]

# Each creature can be only on left (0) or right side (1) on every state
HumanSide = [ Or(Human[i] == 0, Human[i] == 1) for i in range(Num) ]
WolfSide = [ Or(Wolf[i] == 0, Wolf[i] == 1) for i in range(Num) ]
GoatSide = [ Or(Goat[i] == 0, Goat[i] == 1) for i in range(Num) ]
CabbageSide = [ Or(Cabbage[i] == 0, Cabbage[i] == 1) for i in range(Num) ]
Side = HumanSide+WolfSide+GoatSide+CabbageSide

Num numerus gradus solvere requiritur. Quisque gradus statum fluminis, navem et omnia entia repraesentat.

Nunc enim temere et in margine sume 10 eamus.

Unaquaeque res in 10 exemplaribus repraesentatur β€” haec aestimatio est in singulis 10 gradibus.

Nunc condiciones incipiamus et perficiamus.

Start = [ Human[0] == 0, Wolf[0] == 0, Goat[0] == 0, Cabbage[0] == 0 ]
Finish = [ Human[9] == 1, Wolf[9] == 1, Goat[9] == 1, Cabbage[9] == 1 ]

Deinde constituimus condiciones ubi lupus caprum edat, vel caper crambem, ut in coarctatione aequationis.
(coram rustico aggredi non potest);

# Wolf cant stand with goat, and goat with cabbage without human. Not 2, not 0 which means that they are one the same side
Safe = [ And( Or(Wolf[i] != Goat[i], Wolf[i] == Human[i]), Or(Goat[i] != Cabbage[i], Goat[i] == Human[i])) for i in range(Num) ]

Et denique omnes actiones possibilis agricolae ubi transitum ibi vel retro definiemus.
Aut lupum, capram, aut brassicam secum sumere potest, aut aliquem capere, aut quoquam non navigare.

Sane sine agricola nemo transire potest.

Hoc exprimetur per hoc, quod quaelibet sequens status fluminis, naviculae et entitates a priori nonnisi stricte limitata differre potest.

Non plus quam 2 frena, et cum multis aliis limitibus, cum agricola non nisi unum ens ad tempus transportare possit nec omnia simul relinqui possunt.

Travel = [ Or(
And(Human[i] == Human[i+1] + 1, Wolf[i] == Wolf[i+1] + 1, Goat[i] == Goat[i+1], Cabbage[i] == Cabbage[i+1]),
And(Human[i] == Human[i+1] + 1, Goat[i] == Goat[i+1] + 1, Wolf[i] == Wolf[i+1], Cabbage[i] == Cabbage[i+1]),
And(Human[i] == Human[i+1] + 1, Cabbage[i] == Cabbage[i+1] + 1, Wolf[i] == Wolf[i+1], Goat[i] == Goat[i+1]),
And(Human[i] == Human[i+1] - 1, Wolf[i] == Wolf[i+1] - 1, Goat[i] == Goat[i+1], Cabbage[i] == Cabbage[i+1]),
And(Human[i] == Human[i+1] - 1, Goat[i] == Goat[i+1] - 1, Wolf[i] == Wolf[i+1], Cabbage[i] == Cabbage[i+1]),
And(Human[i] == Human[i+1] - 1, Cabbage[i] == Cabbage[i+1] - 1, Wolf[i] == Wolf[i+1], Goat[i] == Goat[i+1]),
And(Wolf[i] == Wolf[i+1], Goat[i] == Goat[i+1], Cabbage[i] == Cabbage[i+1])) for i in range(Num-1) ]

Solutio curramus.

solve(Side + Start + Finish + Safe + Travel)

Et responsum dabimus tibi!

Z3 constitutum invenitur constans civitatum quae omnibus conditionibus satisfacit.
Quadam jactus spatii dimensiva temporis.

Quid factum sit figura.

Videmus in fine omnes transisse, primo tantum quiescere colonus placuit, et in primis 2 gradibus non natat alicubi.

Human_2 = 0
Human_3 = 0

Ex quo plura, quam voluerimus, numerus civitatum, 8 satis abundeque sufficiet.

In nobis hoc fecit agricola: initium, quies, requies, transi caprum, crucis dorsum, transi brassicam, redi cum hirco, transi lupum, revertere solus, re- cusa caprum.

Sed in fine solvitur quaestio.

#Π‘Ρ‚Π°Ρ€Ρ‚.
 Human_1 = 0
 Wolf_1 = 0
 Goat_1 = 0
 Cabbage_1 = 0
 
 #Π€Π΅Ρ€ΠΌΠ΅Ρ€ ΠΎΡ‚Π΄Ρ‹Ρ…Π°Π΅Ρ‚.
 Human_2 = 0
 Wolf_2 = 0
 Goat_2 = 0
 Cabbage_2 = 0
 
 #Π€Π΅Ρ€ΠΌΠ΅Ρ€ ΠΎΡ‚Π΄Ρ‹Ρ…Π°Π΅Ρ‚.
 Human_3 = 0
 Wolf_3 = 0
 Goat_3 = 0
 Cabbage_3 = 0
 
 #Π€Π΅Ρ€ΠΌΠ΅Ρ€ ΠΎΡ‚Π²ΠΎΠ·ΠΈΡ‚ ΠΊΠΎΠ·Ρƒ Π½Π° Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π±Π΅Ρ€Π΅Π³.
 Human_4 = 1
 Wolf_4 = 0
 Goat_4 = 1
 Cabbage_4 = 0
 
 #Π€Π΅Ρ€ΠΌΠ΅Ρ€ возвращаСтся.
 Human_5 = 0
 Wolf_5 = 0
 Goat_5 = 1
 Cabbage_5 = 0
 
 #Π€Π΅Ρ€ΠΌΠ΅Ρ€ ΠΎΡ‚Π²ΠΎΠ·ΠΈΡ‚ капусту Π½Π° Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π±Π΅Ρ€Π΅Π³.
 Human_6 = 1
 Wolf_6 = 0
 Cabbage_6 = 1
 Goat_6 = 1
 
 #ΠšΠ»ΡŽΡ‡Π΅Π²Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ: Ρ„Π΅Ρ€ΠΌΠ΅Ρ€ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠ·Ρƒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ.
 Human_7 = 0
 Wolf_7 = 0
 Goat_7 = 0
 Cabbage_7 = 1
 
 #Π€Π΅Ρ€ΠΌΠ΅Ρ€ ΠΎΡ‚Π²ΠΎΠ·ΠΈΡ‚ Π²ΠΎΠ»ΠΊΠ° Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π±Π΅Ρ€Π΅Π³, Π³Π΄Π΅ ΠΎΠ½ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ находится вмСстС с капустой.
 Human_8 = 1
 Wolf_8 = 1
 Goat_8 = 0
 Cabbage_8 = 1
 
 #Π€Π΅Ρ€ΠΌΠ΅Ρ€ возвращаСтся Π·Π° ΠΊΠΎΠ·ΠΎΠΉ.
 Human_9 = 0
 Wolf_9 = 1
 Goat_9 = 0
 Cabbage_9 = 1
 
 #Π€Π΅Ρ€ΠΌΠ΅Ρ€ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ доставляСт ΠΊΠΎΠ·Ρƒ Π½Π° Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π±Π΅Ρ€Π΅Π³ ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ ΠΏΠ΅Ρ€Π΅ΠΏΡ€Π°Π²Ρƒ.
 Human_10 = 1
 Wolf_10 = 1
 Goat_10 = 1
 Cabbage_10 = 1

Nunc condiciones mutare conemur et solutiones nullas esse probamus.

Ad hoc, dabimus nostrum lupum herbivoram, et volet brassicam comedere.
Comparari hoc potest cum casu in quo propositum est ad obtinendam applicationem et opus fac ut non sint densi.

 Safe = [ And( Or(Wolf[i] != Goat[i], Wolf[i] == Human[i]), Or(Goat[i] != Cabbage[i], Goat[i] == Human[i]), Or(Wolf[i] != Cabbage[i], Goat[i] == Human[i])) for i in range(Num) ]

Z3 nobis hoc responsum dedit;

 no solution

Significat revera nullae esse solutiones.

Ita programmatice demonstravimus impossibilitatem cum omnivoro lupo sine detrimento agricolae transire.

Si audientium studium hunc locum invenerit, in sequentibus articulis narrabo quomodo ordinarium propositum vel munus in aequationem methodis formalibus compatibilis vertere ac solvere, tum omnes legitimas missiones et vulnerabilitates revelare. Primum, idem munus, sed in forma programmatis praesentatur, deinde paulatim implicans et progrediens ad exempla hodierna e mundo progressionis programmatis.

Articulus sequens iam paratus est;
Creando formalis ratio verificationis de scabere: Scribens symbolicum VM in PHP et Python

In eo progredior a formali verificatione problematum ad programmata et describendum
quomodo possunt in regulas formales automatice converti.

Source: www.habr.com