Attention une mise à jour du service Gitlab va être effectuée le mardi 30 novembre entre 17h30 et 18h00. Cette mise à jour va générer une interruption du service dont nous ne maîtrisons pas complètement la durée mais qui ne devrait pas excéder quelques minutes. Cette mise à jour intermédiaire en version 14.0.12 nous permettra de rapidement pouvoir mettre à votre disposition une version plus récente.

Commit b6149494 authored by Jean-Christophe Filliâtre's avatar Jean-Christophe Filliâtre
Browse files

Gilbreath's card trick: split into a theory and a program

parent 7112d18b
......@@ -8,13 +8,13 @@
http://www.springerlink.com/content/gn18673357154448/
*)
module GilbreathCardTrick
theory GilbreathCardTrick
use import int.Int
use import list.List
use import list.Append
use import list.Reverse
use import module stack.Stack
use export int.Int
use export list.List
use export list.Length
use export list.Append
use export list.Reverse
function m: int
axiom m_positive: 0 < m
......@@ -38,7 +38,15 @@ module GilbreathCardTrick
lemma shuffle_nil_nil_nil: shuffle Nil Nil (Nil: list 'a)
lemma shuffle_length:
forall a b c: list 'a. shuffle a b c -> L.length a + L.length b = L.length c
forall a b c: list 'a. shuffle a b c -> length a + length b = length c
end
(* a program implementing the card trick using stacks *)
module GilbreathCardTrick
use import GilbreathCardTrick
use import module stack.Stack
let shuffle (a b: t int) =
{}
......
......@@ -2,24 +2,6 @@
(* Beware! Only edit allowed sections below *)
Require Import ZArith.
Require Import Rbase.
Definition unit := unit.
Parameter qtmark : Type.
Parameter at1: forall (a:Type), a -> qtmark -> a.
Implicit Arguments at1.
Parameter old: forall (a:Type), a -> a.
Implicit Arguments old.
Definition implb(x:bool) (y:bool): bool := match (x,
y) with
| (true, false) => false
| (_, _) => true
end.
Inductive list (a:Type) :=
| Nil : list a
| Cons : a -> (list a) -> list a.
......@@ -28,6 +10,20 @@ Implicit Arguments Nil.
Unset Contextual Implicit.
Implicit Arguments Cons.
Set Implicit Arguments.
Fixpoint length (a:Type)(l:(list a)) {struct l}: Z :=
match l with
| Nil => 0%Z
| (Cons _ r) => (1%Z + (length r))%Z
end.
Unset Implicit Arguments.
Axiom Length_nonnegative : forall (a:Type), forall (l:(list a)),
(0%Z <= (length l))%Z.
Axiom Length_nil : forall (a:Type), forall (l:(list a)),
((length l) = 0%Z) <-> (l = (Nil:(list a))).
Set Implicit Arguments.
Fixpoint infix_plpl (a:Type)(l1:(list a)) (l2:(list a)) {struct l1}: (list
a) :=
......@@ -44,20 +40,6 @@ Axiom Append_assoc : forall (a:Type), forall (l1:(list a)) (l2:(list a))
Axiom Append_l_nil : forall (a:Type), forall (l:(list a)), ((infix_plpl l
(Nil:(list a))) = l).
Set Implicit Arguments.
Fixpoint length (a:Type)(l:(list a)) {struct l}: Z :=
match l with
| Nil => 0%Z
| (Cons _ r) => (1%Z + (length r))%Z
end.
Unset Implicit Arguments.
Axiom Length_nonnegative : forall (a:Type), forall (l:(list a)),
(0%Z <= (length l))%Z.
Axiom Length_nil : forall (a:Type), forall (l:(list a)),
((length l) = 0%Z) <-> (l = (Nil:(list a))).
Axiom Append_length : forall (a:Type), forall (l1:(list a)) (l2:(list a)),
((length (infix_plpl l1 l2)) = ((length l1) + (length l2))%Z).
......@@ -93,19 +75,6 @@ Axiom reverse_reverse : forall (a:Type), forall (l:(list a)),
Axiom Reverse_length : forall (a:Type), forall (l:(list a)),
((length (reverse l)) = (length l)).
Inductive t (a:Type) :=
| mk_t : (list a) -> t a.
Implicit Arguments mk_t.
Definition elts (a:Type)(u:(t a)): (list a) :=
match u with
| (mk_t elts1) => elts1
end.
Implicit Arguments elts.
Definition length1 (a:Type)(s:(t a)): Z := (length (elts s)).
Implicit Arguments length1.
Parameter m: Z.
......
......@@ -43,14 +43,14 @@
verified="true"
expanded="true">
<theory
name="WP GilbreathCardTrick"
name="GilbreathCardTrick"
verified="true"
expanded="true">
<goal
name="shuffle_nil_nil_nil"
sum="3b47475f6ab942b933931d3bc42a6670"
sum="0f3a893bbb6db91b9e8425a35a14fe9c"
proved="true"
expanded="false"
expanded="true"
shape="ashuffleaNilaNilaNil">
<proof
prover="alt-ergo"
......@@ -62,33 +62,38 @@
</goal>
<goal
name="shuffle_length"
sum="5327d7ad514780bfe11fdfbf79dc49ca"
sum="7e83b1555e35fcabcfa4fdf44e648d95"
proved="true"
expanded="true"
shape="ainfix =ainfix +alengthV0alengthV1alengthV2IashuffleV0V1V2F">
<proof
prover="coq"
timelimit="10"
edited="unraveling_a_card_trick_WP_GilbreathCardTrick_shuffle_length_1.v"
edited="unraveling_a_card_trick_GilbreathCardTrick_shuffle_length_1.v"
obsolete="false">
<result status="valid" time="0.44"/>
<result status="valid" time="0.48"/>
</proof>
</goal>
</theory>
<theory
name="WP GilbreathCardTrick"
verified="true"
expanded="true">
<goal
name="WP_parameter shuffle"
expl="parameter shuffle"
sum="6000bcc88d21d06f385bbba901228ed5"
sum="86b037d0168c22bdd01d4bb26fb6086b"
proved="true"
expanded="true"
expanded="false"
shape="iainfix =V6aTrueiainfix =V7aTrueNiainfix =V8aTrueNiainfix =V10aTrueOainfix =V9aTrueainfix =V5aNilAainfix =V11V5NFAainfix <ainfix +alengthV12alengthV4ainfix +alengthV5alengthV4Aainfix <=c0ainfix +alengthV5alengthV4AashuffleV15V16V14Aainfix =areverseV0ainfix ++areverseV4V16Aainfix =areverseV1ainfix ++areverseV12V15EIainfix =V14aConsV13V3FICV5aNilfaConsVVainfix =V12V18Aainfix =V13V17FFainfix =V4aNilAainfix =V19V4NFAainfix <ainfix +alengthV5alengthV20ainfix +alengthV5alengthV4Aainfix <=c0ainfix +alengthV5alengthV4AashuffleV23V24V22Aainfix =areverseV0ainfix ++areverseV20V24Aainfix =areverseV1ainfix ++areverseV5V23EIainfix =V22aConsV21V3FICV4aNilfaConsVVainfix =V20V26Aainfix =V21V25FFFIainfix =V4aNilqainfix =V9aTrueFainfix =V4aNilAainfix =V27V4NFAainfix <ainfix +alengthV5alengthV28ainfix +alengthV5alengthV4Aainfix <=c0ainfix +alengthV5alengthV4AashuffleV31V32V30Aainfix =areverseV0ainfix ++areverseV28V32Aainfix =areverseV1ainfix ++areverseV5V31EIainfix =V30aConsV29V3FICV4aNilfaConsVVainfix =V28V34Aainfix =V29V33FFIainfix =V5aNilqainfix =V8aTrueFashuffleareverseV1areverseV0V3Aainfix =V4aNilAainfix =V5aNilIainfix =V4aNilqainfix =V7aTrueFiainfix =V35aTrueNiainfix =V37aTrueOainfix =V36aTrueainfix =V5aNilAainfix =V38V5NFAainfix <ainfix +alengthV39alengthV4ainfix +alengthV5alengthV4Aainfix <=c0ainfix +alengthV5alengthV4AashuffleV42V43V41Aainfix =areverseV0ainfix ++areverseV4V43Aainfix =areverseV1ainfix ++areverseV39V42EIainfix =V41aConsV40V3FICV5aNilfaConsVVainfix =V39V45Aainfix =V40V44FFainfix =V4aNilAainfix =V46V4NFAainfix <ainfix +alengthV5alengthV47ainfix +alengthV5alengthV4Aainfix <=c0ainfix +alengthV5alengthV4AashuffleV50V51V49Aainfix =areverseV0ainfix ++areverseV47V51Aainfix =areverseV1ainfix ++areverseV5V50EIainfix =V49aConsV48V3FICV4aNilfaConsVVainfix =V47V53Aainfix =V48V52FFFIainfix =V4aNilqainfix =V36aTrueFainfix =V4aNilAainfix =V54V4NFAainfix <ainfix +alengthV5alengthV55ainfix +alengthV5alengthV4Aainfix <=c0ainfix +alengthV5alengthV4AashuffleV58V59V57Aainfix =areverseV0ainfix ++areverseV55V59Aainfix =areverseV1ainfix ++areverseV5V58EIainfix =V57aConsV56V3FICV4aNilfaConsVVainfix =V55V61Aainfix =V56V60FFIainfix =V5aNilqainfix =V35aTrueFIainfix =V5aNilqainfix =V6aTrueFIashuffleV62V63V3Aainfix =areverseV0ainfix ++areverseV4V63Aainfix =areverseV1ainfix ++areverseV5V62EFFFAashuffleV64V65V2Aainfix =areverseV0ainfix ++areverseV0V65Aainfix =areverseV1ainfix ++areverseV1V64EIainfix =V2aNilFFF">
<transf
name="split_goal"
proved="true"
expanded="true">
expanded="false">
<goal
name="WP_parameter shuffle.1"
expl="loop invariant init"
sum="7c6b0c6cd77ee2fabd5ff53515b80dae"
sum="c5d77e573a0388684ab31669f6f16a6b"
proved="true"
expanded="false"
shape="ashuffleV3V4V2Aainfix =areverseV0ainfix ++areverseV0V4Aainfix =areverseV1ainfix ++areverseV1V3EIainfix =V2aNilFFF">
......@@ -97,13 +102,13 @@
timelimit="10"
edited=""
obsolete="false">
<result status="valid" time="0.05"/>
<result status="valid" time="0.07"/>
</proof>
</goal>
<goal
name="WP_parameter shuffle.2"
expl="loop invariant preservation"
sum="dc0890f423682a59a015e26c9aca6992"
sum="4b0c3215cd73778d65f66afb75c0a5b8"
proved="true"
expanded="false"
shape="ashuffleV14V15V13Aainfix =areverseV0ainfix ++areverseV4V15Aainfix =areverseV1ainfix ++areverseV11V14EIainfix =V13aConsV12V3FICV5aNilfaConsVVainfix =V11V17Aainfix =V12V16FFIainfix =V10aTrueOainfix =V9aTrueFIainfix =V4aNilqainfix =V9aTrueFIainfix =V8aTrueNIainfix =V5aNilqainfix =V8aTrueFIainfix =V7aTrueNIainfix =V4aNilqainfix =V7aTrueFIainfix =V6aTrueIainfix =V5aNilqainfix =V6aTrueFIashuffleV18V19V3Aainfix =areverseV0ainfix ++areverseV4V19Aainfix =areverseV1ainfix ++areverseV5V18EFFFIainfix =V2aNilFFF">
......@@ -112,13 +117,13 @@
timelimit="10"
edited=""
obsolete="false">
<result status="valid" time="0.01"/>
<result status="valid" time="0.03"/>
</proof>
</goal>
<goal
name="WP_parameter shuffle.3"
expl="loop variant decreases"
sum="1a76f4483e25eb969494a612611f2002"
sum="977ab7ffb22752e37e68a3756cc1c70e"
proved="true"
expanded="false"
shape="ainfix <ainfix +alengthV11alengthV4ainfix +alengthV5alengthV4Aainfix <=c0ainfix +alengthV5alengthV4IashuffleV14V15V13Aainfix =areverseV0ainfix ++areverseV4V15Aainfix =areverseV1ainfix ++areverseV11V14EIainfix =V13aConsV12V3FICV5aNilfaConsVVainfix =V11V17Aainfix =V12V16FFIainfix =V10aTrueOainfix =V9aTrueFIainfix =V4aNilqainfix =V9aTrueFIainfix =V8aTrueNIainfix =V5aNilqainfix =V8aTrueFIainfix =V7aTrueNIainfix =V4aNilqainfix =V7aTrueFIainfix =V6aTrueIainfix =V5aNilqainfix =V6aTrueFIashuffleV18V19V3Aainfix =areverseV0ainfix ++areverseV4V19Aainfix =areverseV1ainfix ++areverseV5V18EFFFIainfix =V2aNilFFF">
......@@ -127,13 +132,13 @@
timelimit="10"
edited=""
obsolete="false">
<result status="valid" time="0.03"/>
<result status="valid" time="0.02"/>
</proof>
</goal>
<goal
name="WP_parameter shuffle.4"
expl="parameter shuffle"
sum="f1b4b964322a4de2932ccbd1ce302373"
sum="3bcae620f6db6e1873fc5e48869867bd"
proved="true"
expanded="false"
shape="ainfix =V5aNilAainfix =V11V5NFIainfix <ainfix +alengthV12alengthV4ainfix +alengthV5alengthV4Aainfix <=c0ainfix +alengthV5alengthV4AashuffleV15V16V14Aainfix =areverseV0ainfix ++areverseV4V16Aainfix =areverseV1ainfix ++areverseV12V15EIainfix =V14aConsV13V3FICV5aNilfaConsVVainfix =V12V18Aainfix =V13V17FFIainfix =V10aTrueOainfix =V9aTrueFIainfix =V4aNilqainfix =V9aTrueFIainfix =V8aTrueNIainfix =V5aNilqainfix =V8aTrueFIainfix =V7aTrueNIainfix =V4aNilqainfix =V7aTrueFIainfix =V6aTrueIainfix =V5aNilqainfix =V6aTrueFIashuffleV19V20V3Aainfix =areverseV0ainfix ++areverseV4V20Aainfix =areverseV1ainfix ++areverseV5V19EFFFIainfix =V2aNilFFF">
......@@ -142,13 +147,13 @@
timelimit="10"
edited=""
obsolete="false">
<result status="valid" time="0.01"/>
<result status="valid" time="0.03"/>
</proof>
</goal>
<goal
name="WP_parameter shuffle.5"
expl="loop invariant preservation"
sum="5573d333a8a407c3fa208137c41ed5a6"
sum="a81599c4f1d77f66570c1db15ce28190"
proved="true"
expanded="false"
shape="ashuffleV14V15V13Aainfix =areverseV0ainfix ++areverseV11V15Aainfix =areverseV1ainfix ++areverseV5V14EIainfix =V13aConsV12V3FICV4aNilfaConsVVainfix =V11V17Aainfix =V12V16FFIainfix =V10aTrueOainfix =V9aTrueNFIainfix =V4aNilqainfix =V9aTrueFIainfix =V8aTrueNIainfix =V5aNilqainfix =V8aTrueFIainfix =V7aTrueNIainfix =V4aNilqainfix =V7aTrueFIainfix =V6aTrueIainfix =V5aNilqainfix =V6aTrueFIashuffleV18V19V3Aainfix =areverseV0ainfix ++areverseV4V19Aainfix =areverseV1ainfix ++areverseV5V18EFFFIainfix =V2aNilFFF">
......@@ -157,13 +162,13 @@
timelimit="10"
edited=""
obsolete="false">
<result status="valid" time="0.02"/>
<result status="valid" time="0.03"/>
</proof>
</goal>
<goal
name="WP_parameter shuffle.6"
expl="loop variant decreases"
sum="9cece4672553fde97f8e27eda03c2fed"
sum="e532bbfcc0f8ecf2890345c3bb97e0b0"
proved="true"
expanded="false"
shape="ainfix <ainfix +alengthV5alengthV11ainfix +alengthV5alengthV4Aainfix <=c0ainfix +alengthV5alengthV4IashuffleV14V15V13Aainfix =areverseV0ainfix ++areverseV11V15Aainfix =areverseV1ainfix ++areverseV5V14EIainfix =V13aConsV12V3FICV4aNilfaConsVVainfix =V11V17Aainfix =V12V16FFIainfix =V10aTrueOainfix =V9aTrueNFIainfix =V4aNilqainfix =V9aTrueFIainfix =V8aTrueNIainfix =V5aNilqainfix =V8aTrueFIainfix =V7aTrueNIainfix =V4aNilqainfix =V7aTrueFIainfix =V6aTrueIainfix =V5aNilqainfix =V6aTrueFIashuffleV18V19V3Aainfix =areverseV0ainfix ++areverseV4V19Aainfix =areverseV1ainfix ++areverseV5V18EFFFIainfix =V2aNilFFF">
......@@ -172,13 +177,13 @@
timelimit="10"
edited=""
obsolete="false">
<result status="valid" time="0.01"/>
<result status="valid" time="0.03"/>
</proof>
</goal>
<goal
name="WP_parameter shuffle.7"
expl="parameter shuffle"
sum="1ad47bfba3da0e23f2e427448c92a99b"
sum="261c3d10a4878b7b52868a316e8dc6e0"
proved="true"
expanded="false"
shape="ainfix =V4aNilAainfix =V11V4NFIainfix <ainfix +alengthV5alengthV12ainfix +alengthV5alengthV4Aainfix <=c0ainfix +alengthV5alengthV4AashuffleV15V16V14Aainfix =areverseV0ainfix ++areverseV12V16Aainfix =areverseV1ainfix ++areverseV5V15EIainfix =V14aConsV13V3FICV4aNilfaConsVVainfix =V12V18Aainfix =V13V17FFIainfix =V10aTrueOainfix =V9aTrueNFIainfix =V4aNilqainfix =V9aTrueFIainfix =V8aTrueNIainfix =V5aNilqainfix =V8aTrueFIainfix =V7aTrueNIainfix =V4aNilqainfix =V7aTrueFIainfix =V6aTrueIainfix =V5aNilqainfix =V6aTrueFIashuffleV19V20V3Aainfix =areverseV0ainfix ++areverseV4V20Aainfix =areverseV1ainfix ++areverseV5V19EFFFIainfix =V2aNilFFF">
......@@ -187,28 +192,28 @@
timelimit="10"
edited=""
obsolete="false">
<result status="valid" time="0.02"/>
<result status="valid" time="0.03"/>
</proof>
</goal>
<goal
name="WP_parameter shuffle.8"
expl="loop invariant preservation"
sum="69e0f3c0ae291ead6927db9c8c39c16e"
sum="d57eeb534ecbcaee69957e4b98283424"
proved="true"
expanded="true"
expanded="false"
shape="ashuffleV12V13V11Aainfix =areverseV0ainfix ++areverseV9V13Aainfix =areverseV1ainfix ++areverseV5V12EIainfix =V11aConsV10V3FICV4aNilfaConsVVainfix =V9V15Aainfix =V10V14FFIainfix =V8aTrueNNIainfix =V5aNilqainfix =V8aTrueFIainfix =V7aTrueNIainfix =V4aNilqainfix =V7aTrueFIainfix =V6aTrueIainfix =V5aNilqainfix =V6aTrueFIashuffleV16V17V3Aainfix =areverseV0ainfix ++areverseV4V17Aainfix =areverseV1ainfix ++areverseV5V16EFFFIainfix =V2aNilFFF">
<proof
prover="coq"
timelimit="10"
edited="unraveling_a_card_trick_WP_GilbreathCardTrick_WP_parameter_shuffle_1.v"
obsolete="false">
<result status="valid" time="0.54"/>
<result status="valid" time="0.62"/>
</proof>
</goal>
<goal
name="WP_parameter shuffle.9"
expl="loop variant decreases"
sum="c43e027c02fd7f40602b50c949f5f6d9"
sum="ecee8cf9187417a0bd484f4226d76d6a"
proved="true"
expanded="false"
shape="ainfix <ainfix +alengthV5alengthV9ainfix +alengthV5alengthV4Aainfix <=c0ainfix +alengthV5alengthV4IashuffleV12V13V11Aainfix =areverseV0ainfix ++areverseV9V13Aainfix =areverseV1ainfix ++areverseV5V12EIainfix =V11aConsV10V3FICV4aNilfaConsVVainfix =V9V15Aainfix =V10V14FFIainfix =V8aTrueNNIainfix =V5aNilqainfix =V8aTrueFIainfix =V7aTrueNIainfix =V4aNilqainfix =V7aTrueFIainfix =V6aTrueIainfix =V5aNilqainfix =V6aTrueFIashuffleV16V17V3Aainfix =areverseV0ainfix ++areverseV4V17Aainfix =areverseV1ainfix ++areverseV5V16EFFFIainfix =V2aNilFFF">
......@@ -223,7 +228,7 @@
<goal
name="WP_parameter shuffle.10"
expl="parameter shuffle"
sum="6364175447419c4e1591622402cb15bb"
sum="5991313b6d33fbcea1f9d166001b58c8"
proved="true"
expanded="false"
shape="ainfix =V4aNilAainfix =V9V4NFIainfix <ainfix +alengthV5alengthV10ainfix +alengthV5alengthV4Aainfix <=c0ainfix +alengthV5alengthV4AashuffleV13V14V12Aainfix =areverseV0ainfix ++areverseV10V14Aainfix =areverseV1ainfix ++areverseV5V13EIainfix =V12aConsV11V3FICV4aNilfaConsVVainfix =V10V16Aainfix =V11V15FFIainfix =V8aTrueNNIainfix =V5aNilqainfix =V8aTrueFIainfix =V7aTrueNIainfix =V4aNilqainfix =V7aTrueFIainfix =V6aTrueIainfix =V5aNilqainfix =V6aTrueFIashuffleV17V18V3Aainfix =areverseV0ainfix ++areverseV4V18Aainfix =areverseV1ainfix ++areverseV5V17EFFFIainfix =V2aNilFFF">
......@@ -232,13 +237,13 @@
timelimit="10"
edited=""
obsolete="false">
<result status="valid" time="0.01"/>
<result status="valid" time="0.03"/>
</proof>
</goal>
<goal
name="WP_parameter shuffle.11"
expl="normal postcondition"
sum="2c054107640df82e05839d561598397d"
sum="8be8ec7920c1d67eca318dae07cd2dfd"
proved="true"
expanded="false"
shape="ashuffleareverseV1areverseV0V3Aainfix =V4aNilAainfix =V5aNilIainfix =V7aTrueNNIainfix =V4aNilqainfix =V7aTrueFIainfix =V6aTrueIainfix =V5aNilqainfix =V6aTrueFIashuffleV8V9V3Aainfix =areverseV0ainfix ++areverseV4V9Aainfix =areverseV1ainfix ++areverseV5V8EFFFIainfix =V2aNilFFF">
......@@ -251,31 +256,31 @@
</proof>
<proof
prover="alt-ergo"
timelimit="10"
timelimit="16"
edited=""
obsolete="false">
<result status="valid" time="7.98"/>
<result status="valid" time="7.89"/>
</proof>
</goal>
<goal
name="WP_parameter shuffle.12"
expl="loop invariant preservation"
sum="f464d4b19482f755558dfd49b6c3ceb8"
sum="5a94b5cf16194069e43e33792feb7dd7"
proved="true"
expanded="true"
expanded="false"
shape="ashuffleV13V14V12Aainfix =areverseV0ainfix ++areverseV4V14Aainfix =areverseV1ainfix ++areverseV10V13EIainfix =V12aConsV11V3FICV5aNilfaConsVVainfix =V10V16Aainfix =V11V15FFIainfix =V9aTrueOainfix =V8aTrueFIainfix =V4aNilqainfix =V8aTrueFIainfix =V7aTrueNIainfix =V5aNilqainfix =V7aTrueFIainfix =V6aTrueNIainfix =V5aNilqainfix =V6aTrueFIashuffleV17V18V3Aainfix =areverseV0ainfix ++areverseV4V18Aainfix =areverseV1ainfix ++areverseV5V17EFFFIainfix =V2aNilFFF">
<proof
prover="coq"
timelimit="10"
edited="unraveling_a_card_trick_WP_GilbreathCardTrick_WP_parameter_shuffle_2.v"
obsolete="false">
<result status="valid" time="0.52"/>
<result status="valid" time="0.78"/>
</proof>
</goal>
<goal
name="WP_parameter shuffle.13"
expl="loop variant decreases"
sum="73f0bc3b468d1df9a596632644022800"
sum="cb1323f88f48a24418e497577ff22696"
proved="true"
expanded="false"
shape="ainfix <ainfix +alengthV10alengthV4ainfix +alengthV5alengthV4Aainfix <=c0ainfix +alengthV5alengthV4IashuffleV13V14V12Aainfix =areverseV0ainfix ++areverseV4V14Aainfix =areverseV1ainfix ++areverseV10V13EIainfix =V12aConsV11V3FICV5aNilfaConsVVainfix =V10V16Aainfix =V11V15FFIainfix =V9aTrueOainfix =V8aTrueFIainfix =V4aNilqainfix =V8aTrueFIainfix =V7aTrueNIainfix =V5aNilqainfix =V7aTrueFIainfix =V6aTrueNIainfix =V5aNilqainfix =V6aTrueFIashuffleV17V18V3Aainfix =areverseV0ainfix ++areverseV4V18Aainfix =areverseV1ainfix ++areverseV5V17EFFFIainfix =V2aNilFFF">
......@@ -284,13 +289,13 @@
timelimit="10"
edited=""
obsolete="false">
<result status="valid" time="0.10"/>
<result status="valid" time="0.12"/>
</proof>
</goal>
<goal
name="WP_parameter shuffle.14"
expl="parameter shuffle"
sum="d40f15fded112e374dffb39e1b27858f"
sum="17f89da0711a04018df95c5f0eff68bc"
proved="true"
expanded="false"
shape="ainfix =V5aNilAainfix =V10V5NFIainfix <ainfix +alengthV11alengthV4ainfix +alengthV5alengthV4Aainfix <=c0ainfix +alengthV5alengthV4AashuffleV14V15V13Aainfix =areverseV0ainfix ++areverseV4V15Aainfix =areverseV1ainfix ++areverseV11V14EIainfix =V13aConsV12V3FICV5aNilfaConsVVainfix =V11V17Aainfix =V12V16FFIainfix =V9aTrueOainfix =V8aTrueFIainfix =V4aNilqainfix =V8aTrueFIainfix =V7aTrueNIainfix =V5aNilqainfix =V7aTrueFIainfix =V6aTrueNIainfix =V5aNilqainfix =V6aTrueFIashuffleV18V19V3Aainfix =areverseV0ainfix ++areverseV4V19Aainfix =areverseV1ainfix ++areverseV5V18EFFFIainfix =V2aNilFFF">
......@@ -299,28 +304,28 @@
timelimit="10"
edited=""
obsolete="false">
<result status="valid" time="0.03"/>
<result status="valid" time="0.02"/>
</proof>
</goal>
<goal
name="WP_parameter shuffle.15"
expl="loop invariant preservation"
sum="3d92afc998eb1b5056f36ee89503f9d1"
sum="a49f7e46d4ef165c074a5379f32ad77e"
proved="true"
expanded="true"
expanded="false"
shape="ashuffleV13V14V12Aainfix =areverseV0ainfix ++areverseV10V14Aainfix =areverseV1ainfix ++areverseV5V13EIainfix =V12aConsV11V3FICV4aNilfaConsVVainfix =V10V16Aainfix =V11V15FFIainfix =V9aTrueOainfix =V8aTrueNFIainfix =V4aNilqainfix =V8aTrueFIainfix =V7aTrueNIainfix =V5aNilqainfix =V7aTrueFIainfix =V6aTrueNIainfix =V5aNilqainfix =V6aTrueFIashuffleV17V18V3Aainfix =areverseV0ainfix ++areverseV4V18Aainfix =areverseV1ainfix ++areverseV5V17EFFFIainfix =V2aNilFFF">
<proof
prover="coq"
timelimit="10"
edited="unraveling_a_card_trick_WP_GilbreathCardTrick_WP_parameter_shuffle_3.v"
obsolete="false">
<result status="valid" time="0.50"/>
<result status="valid" time="0.78"/>
</proof>
</goal>
<goal
name="WP_parameter shuffle.16"
expl="loop variant decreases"
sum="c5b67cd67fb61a3ae8f8761ce791f4b1"
sum="3fd5185cedf81217ff2d6d5bd07d8dab"
proved="true"
expanded="false"
shape="ainfix <ainfix +alengthV5alengthV10ainfix +alengthV5alengthV4Aainfix <=c0ainfix +alengthV5alengthV4IashuffleV13V14V12Aainfix =areverseV0ainfix ++areverseV10V14Aainfix =areverseV1ainfix ++areverseV5V13EIainfix =V12aConsV11V3FICV4aNilfaConsVVainfix =V10V16Aainfix =V11V15FFIainfix =V9aTrueOainfix =V8aTrueNFIainfix =V4aNilqainfix =V8aTrueFIainfix =V7aTrueNIainfix =V5aNilqainfix =V7aTrueFIainfix =V6aTrueNIainfix =V5aNilqainfix =V6aTrueFIashuffleV17V18V3Aainfix =areverseV0ainfix ++areverseV4V18Aainfix =areverseV1ainfix ++areverseV5V17EFFFIainfix =V2aNilFFF">
......@@ -329,13 +334,13 @@
timelimit="10"
edited=""
obsolete="false">
<result status="valid" time="0.06"/>
<result status="valid" time="0.10"/>
</proof>
</goal>
<goal
name="WP_parameter shuffle.17"
expl="parameter shuffle"
sum="c03363b877a96d77d719415554a42551"
sum="3f9f0878e737235cff34275f5acb874d"
proved="true"
expanded="false"
shape="ainfix =V4aNilAainfix =V10V4NFIainfix <ainfix +alengthV5alengthV11ainfix +alengthV5alengthV4Aainfix <=c0ainfix +alengthV5alengthV4AashuffleV14V15V13Aainfix =areverseV0ainfix ++areverseV11V15Aainfix =areverseV1ainfix ++areverseV5V14EIainfix =V13aConsV12V3FICV4aNilfaConsVVainfix =V11V17Aainfix =V12V16FFIainfix =V9aTrueOainfix =V8aTrueNFIainfix =V4aNilqainfix =V8aTrueFIainfix =V7aTrueNIainfix =V5aNilqainfix =V7aTrueFIainfix =V6aTrueNIainfix =V5aNilqainfix =V6aTrueFIashuffleV18V19V3Aainfix =areverseV0ainfix ++areverseV4V19Aainfix =areverseV1ainfix ++areverseV5V18EFFFIainfix =V2aNilFFF">
......@@ -344,13 +349,13 @@
timelimit="10"
edited=""
obsolete="false">
<result status="valid" time="0.03"/>
<result status="valid" time="0.02"/>
</proof>
</goal>
<goal
name="WP_parameter shuffle.18"
expl="loop invariant preservation"
sum="9b10ab49605c6a8c031e88d9017e80ab"
sum="e68828822e93b2ffc7ec3c769d0f50b2"
proved="true"
expanded="false"
shape="ashuffleV11V12V10Aainfix =areverseV0ainfix ++areverseV8V12Aainfix =areverseV1ainfix ++areverseV5V11EIainfix =V10aConsV9V3FICV4aNilfaConsVVainfix =V8V14Aainfix =V9V13FFIainfix =V7aTrueNNIainfix =V5aNilqainfix =V7aTrueFIainfix =V6aTrueNIainfix =V5aNilqainfix =V6aTrueFIashuffleV15V16V3Aainfix =areverseV0ainfix ++areverseV4V16Aainfix =areverseV1ainfix ++areverseV5V15EFFFIainfix =V2aNilFFF">
......@@ -359,13 +364,13 @@
timelimit="10"
edited=""
obsolete="false">
<result status="valid" time="0.02"/>
<result status="valid" time="0.03"/>
</proof>
</goal>
<goal
name="WP_parameter shuffle.19"
expl="loop variant decreases"
sum="879fc10a265fa95838d7bc4802f08c65"
sum="53b32ba35887c41be2aec8116da3bee7"
proved="true"
expanded="false"
shape="ainfix <ainfix +alengthV5alengthV8ainfix +alengthV5alengthV4Aainfix <=c0ainfix +alengthV5alengthV4IashuffleV11V12V10Aainfix =areverseV0ainfix ++areverseV8V12Aainfix =areverseV1ainfix ++areverseV5V11EIainfix =V10aConsV9V3FICV4aNilfaConsVVainfix =V8V14Aainfix =V9V13FFIainfix =V7aTrueNNIainfix =V5aNilqainfix =V7aTrueFIainfix =V6aTrueNIainfix =V5aNilqainfix =V6aTrueFIashuffleV15V16V3Aainfix =areverseV0ainfix ++areverseV4V16Aainfix =areverseV1ainfix ++areverseV5V15EFFFIainfix =V2aNilFFF">
......@@ -380,7 +385,7 @@
<goal
name="WP_parameter shuffle.20"
expl="parameter shuffle"
sum="e1d6d62e7b6ba46f6fb3262cda45a555"
sum="7b3d907173a105d49d54d7c60e717c24"
proved="true"
expanded="false"
shape="ainfix =V4aNilAainfix =V8V4NFIainfix <ainfix +alengthV5alengthV9ainfix +alengthV5alengthV4Aainfix <=c0ainfix +alengthV5alengthV4AashuffleV12V13V11Aainfix =areverseV0ainfix ++areverseV9V13Aainfix =areverseV1ainfix ++areverseV5V12EIainfix =V11aConsV10V3FICV4aNilfaConsVVainfix =V9V15Aainfix =V10V14FFIainfix =V7aTrueNNIainfix =V5aNilqainfix =V7aTrueFIainfix =V6aTrueNIainfix =V5aNilqainfix =V6aTrueFIashuffleV16V17V3Aainfix =areverseV0ainfix ++areverseV4V17Aainfix =areverseV1ainfix ++areverseV5V16EFFFIainfix =V2aNilFFF">
......@@ -389,7 +394,7 @@
timelimit="10"
edited=""
obsolete="false">
<result status="valid" time="0.03"/>
<result status="valid" time="0.02"/>
</proof>
</goal>
</transf>
......@@ -397,7 +402,7 @@
<goal
name="WP_parameter card_trick"
expl="parameter card_trick"
sum="3fd341427af8296ed170627963747fb8"
sum="ee7a5543bb0b7337823279753668c90c"
proved="true"
expanded="false"
shape="ainfix =alengthV7ainfix *anamIashuffleareverseV4areverseV3V7Aainfix =V5aNilAainfix =V6aNilFFFAainfix =V0ainfix ++areverseV3V4Iainfix =V0ainfix ++areverseV3V4Aainfix =alengthV3ainfix -ainfix +V2c1c1Aainfix =alengthV4ainfix +ainfix -ainfix *anamainfix +V2c1c1Aainfix =V4aNilAainfix =V9V4NFAainfix =V0ainfix ++areverseV12V10Aainfix =alengthV12ainfix -ainfix +V8c1c1Aainfix =alengthV10ainfix +ainfix -ainfix *anamainfix +V8c1c1Iainfix =V12aConsV11V3FICV4aNilfaConsVVainfix =V10V14Aainfix =V11V13FFIainfix =V0ainfix ++areverseV3V4Aainfix =alengthV3ainfix -V8c1Aainfix =alengthV4ainfix +ainfix -ainfix *anamV8c1Iainfix <=V8V2Aainfix <=c1V8FFFAainfix =V0ainfix ++areverseV1V0Aainfix =alengthV1ainfix -c1c1Aainfix =alengthV0ainfix +ainfix -ainfix *anamc1c1Iainfix <=c1V2Aainfix =alengthV17ainfix *anamIashuffleareverseV0areverseV1V17Aainfix =V15aNilAainfix =V16aNilFFFAainfix =V0ainfix ++areverseV1V0Iainfix >c1V2Iainfix <=V2ainfix *anamAainfix <=c0V2FIainfix =V1aNilFIainfix =alengthV0ainfix *anamF">
......@@ -408,7 +413,7 @@
<goal
name="WP_parameter card_trick.1"
expl="assertion"
sum="d192f8db957d92958881d175e75baae9"
sum="79142a2ccaea7f6a5f8480407b1c9fc1"
proved="true"
expanded="false"
shape="ainfix =V0ainfix ++areverseV1V0Iainfix >c1V2Iainfix <=V2ainfix *anamAainfix <=c0V2FIainfix =V1aNilFIainfix =alengthV0ainfix *anamF">
......@@ -417,13 +422,13 @@
timelimit="10"
edited=""
obsolete="false">
<result status="valid" time="0.06"/>
<result status="valid" time="0.07"/>
</proof>
</goal>
<goal
name="WP_parameter card_trick.2"
expl="normal postcondition"
sum="e78cec09bf747a69aff826b1dca4bb14"
sum="b77b6b0be2fd415cf366d679820d46e8"
proved="true"
expanded="false"
shape="ainfix =alengthV5ainfix *anamIashuffleareverseV0areverseV1V5Aainfix =V3aNilAainfix =V4aNilFFFIainfix =V0ainfix ++areverseV1V0Iainfix >c1V2Iainfix <=V2ainfix *anamAainfix <=c0V2FIainfix =V1aNilFIainfix =alengthV0ainfix *anamF">
......@@ -432,13 +437,13 @@
timelimit="10"
edited=""
obsolete="false">
<result status="valid" time="0.05"/>
<result status="valid" time="0.08"/>
</proof>
</goal>
<goal
name="WP_parameter card_trick.3"
expl="for loop initialization"
sum="70235a2a09a0edc873dc0adb87f844a1"
sum="0968f46cb1a681830ef0de0a78ff658b"
proved="true"
expanded="false"
shape="ainfix =V0ainfix ++areverseV1V0Aainfix =alengthV1ainfix -c1c1Aainfix =alengthV0ainfix +ainfix -ainfix *anamc1c1Iainfix <=c1V2Iainfix <=V2ainfix *anamAainfix <=c0V2FIainfix =V1aNilFIainfix =alengthV0ainfix *anamF">
......@@ -447,13 +452,13 @@
timelimit="10"
edited=""
obsolete="false">
<result status="valid" time="0.09"/>
<result status="valid" time="0.13"/>
</proof>
</goal>
<goal
name="WP_parameter card_trick.4"
expl="for loop preservation"
sum="863f4e4d381972f97f99292cf6b3f9da"
sum="62cb2b36b3f21cb0cffb9849585c9463"
proved="true"
expanded="false"
shape="ainfix =V4aNilAainfix =V6V4NFAainfix =V0ainfix ++areverseV9V7Aainfix =alengthV9ainfix -ainfix +V5c1c1Aainfix =alengthV7ainfix +ainfix -ainfix *anamainfix +V5c1c1Iainfix =V9aConsV8V3FICV4aNilfaConsVVainfix =V7V11Aainfix =V8V10FFIainfix =V0ainfix ++areverseV3V4Aainfix =alengthV3ainfix -V5c1Aainfix =alengthV4ainfix +ainfix -ainfix *anamV5c1Iainfix <=V5V2Aainfix <=c1V5FFFIainfix <=c1V2Iainfix <=V2ainfix *anamAainfix <=c0V2FIainfix =V1aNilFIainfix =alengthV0ainfix *anamF">
......@@ -464,7 +469,7 @@
<goal
name="WP_parameter card_trick.4.1"
expl="for loop preservation"
sum="642f0065293123a6d662e20991bc7c90"
sum="75076e3e18b4f6ed5c7e7fb24dae249f"
proved="true"
expanded="false"
shape="ainfix =alengthV6ainfix +ainfix -ainfix *anamainfix +V5c1c1Iainfix =V8aConsV7V3FICV4aNilfaConsVVainfix =V6V10Aainfix =V7V9FFIainfix =V0ainfix ++areverseV3V4Aainfix =alengthV3ainfix -V5c1Aainfix =alengthV4ainfix +ainfix -ainfix *anamV5c1Iainfix <=V5V2Aainfix <=c1V5FFFIainfix <=c1V2Iainfix <=V2ainfix *anamAainfix <=c0V2FIainfix =V1aNilFIainfix =alengthV0ainfix *anamF">
......@@ -473,13 +478,13 @@
timelimit="10"
edited=""
obsolete="false">
<result status="valid" time="0.21"/>
<result status="valid" time="0.28"/>
</proof>
</goal>
<goal
name="WP_parameter card_trick.4.2"
expl="for loop preservation"
sum="3dc4a6e82699103efac5c5cb061af225"
sum="38dd27ca873350305abf33119981cc26"
proved="true"
expanded="false"
shape="ainfix =alengthV8ainfix -ainfix +V5c1c1Iainfix =V8aConsV7V3FICV4aNilfaConsVVainfix =V6V10Aainfix =V7V9FFIainfix =V0ainfix ++areverseV3V4Aainfix =alengthV3ainfix -V5c1Aainfix =alengthV4ainfix +ainfix -ainfix *anamV5c1Iainfix <=V5V2Aainfix <=c1V5FFFIainfix <=c1V2Iainfix <=V2ainfix *anamAainfix <=c0V2FIainfix =V1aNilFIainfix =alengthV0ainfix *anamF">
......@@ -488,13 +493,13 @@
timelimit="10"
edited=""
obsolete="false">
<result status="valid" time="0.06"/>
<result status="valid" time="0.05"/>
</proof>
</goal>
<goal
name="WP_parameter card_trick.4.3"
expl="for loop preservation"
sum="c6d7820321547f538d7b03a2cb92c5b9"
sum="11be80c78bcbb53943ebc51a5ac36577"
proved="true"
expanded="false"
shape="ainfix =V0ainfix ++areverseV8V6Iainfix =V8aConsV7V3FICV4aNilfaConsVVainfix =V6V10Aainfix =V7V9FFIainfix =V0ainfix ++areverseV3V4Aainfix =alengthV3ainfix -V5c1Aainfix =alengthV4ainfix +ainfix -ainfix *anamV5c1Iainfix <=V5V2Aainfix <=c1V5FFFIainfix <=c1V2Iainfix <=V2ainfix *anamAainfix <=c0V2FIainfix =V1aNilFIainfix =alengthV0ainfix *anamF">
......@@ -503,13 +508,13 @@
timelimit="10"
edited=""
obsolete="false">
<result status="valid" time="0.03"/>
<result status="valid" time="0.02"/>
</proof>
</goal>
<goal
name="WP_parameter card_trick.4.4"
expl="for loop preservation"
sum="7cb11c6fcf4b49bccd8ad8b0202be286"
sum="4f54ca47f3d2e3244a24e97cd1f3233a"
proved="true"