Relieving User Effort for the Auto Tactic in Coq with Machine - - PowerPoint PPT Presentation

relieving user effort for the auto tactic in coq with
SMART_READER_LITE
LIVE PREVIEW

Relieving User Effort for the Auto Tactic in Coq with Machine - - PowerPoint PPT Presentation

Relieving User Effort for the Auto Tactic in Coq with Machine Learning Lasse Blaauwbroek Czech Technical University in Prague Radboud University in Nijmegen September 14, 2020 An exposition of different proof styles in Coq An exposition of


slide-1
SLIDE 1

Relieving User Effort for the Auto Tactic in Coq with Machine Learning

Lasse Blaauwbroek

Czech Technical University in Prague Radboud University in Nijmegen

September 14, 2020

slide-2
SLIDE 2

An exposition of different proof styles in Coq

slide-3
SLIDE 3

An exposition of different proof styles in Coq

any ridicule regarding proof styles should be directed at me and me alone

slide-4
SLIDE 4
  • eapply typing_abs. intros. cbn. eapply typing_app. apply typing_union_elim.

+ apply typing_inter_intro. * eapply typing_abs. intros. cbn. apply typing_merge1. apply typing_union_intro1. eapply typing_var. apply M.add_1.

  • auto. reflexivity. constructor. econstructor. intros. cbn. constructor.

* eapply typing_abs. intros. cbn. apply typing_merge2. eapply typing_app.

  • apply typing_inter_intro.

++ eapply typing_abs. intros. cbn. apply typing_merge1. ++ eapply typing_abs. intros. cbn. apply typing_merge2. ** apply typing_merge1. eapply typing_var. apply M.add_2. ** apply typing_merge2. eapply typing_var. apply M.add_1. ** constructor.

  • eapply typing_inter_elim2. eapply typing_var. apply M.add_2.
  • - constructor.

+ eapply typing_inter_elim1. eapply typing_var. apply M.add_1. auto.

slide-5
SLIDE 5
  • eapply typing_abs. intros. cbn. eapply typing_app. apply typing_union_elim.

+ apply typing_inter_intro. * eapply typing_abs. intros. cbn. apply typing_merge1. apply typing_union_intro1. eapply typing_var. apply M.add_1.

  • auto. reflexivity. constructor. econstructor. intros. cbn. constructor.

* eapply typing_abs. intros. cbn. apply typing_merge2. eapply typing_app.

  • apply typing_inter_intro.

++ eapply typing_abs. intros. cbn. apply typing_merge1. ++ eapply typing_abs. intros. cbn. apply typing_merge2. ** apply typing_merge1. eapply typing_var. apply M.add_2. ** apply typing_merge2. eapply typing_var. apply M.add_1. ** constructor.

  • eapply typing_inter_elim2. eapply typing_var. apply M.add_2.
  • - constructor.

+ eapply typing_inter_elim1. eapply typing_var. apply M.add_1. auto.

slide-6
SLIDE 6
  • eapply typing_abs. intros. cbn. eapply typing_app. apply typing_union_elim.

+ apply typing_inter_intro. * eapply typing_abs. intros. cbn. apply typing_merge1. apply typing_union_intro1. eapply typing_var. apply M.add_1.

  • auto. reflexivity. constructor. econstructor. intros. cbn. constructor.

* eapply typing_abs. intros. cbn. apply typing_merge2. eapply typing_app.

  • apply typing_inter_intro.

++ eapply typing_abs. intros. cbn. apply typing_merge1. ++ eapply typing_abs. intros. cbn. apply typing_merge2. ** apply typing_merge1. eapply typing_var. apply M.add_2. ** apply typing_merge2. eapply typing_var. apply M.add_1. ** constructor.

  • eapply typing_inter_elim2. eapply typing_var. apply M.add_2.
  • - constructor.

+ eapply typing_inter_elim1. eapply typing_var. apply M.add_1. auto.

slide-7
SLIDE 7
  • eapply typing_abs. intros. cbn. eapply typing_app. apply typing_union_elim.

+ apply typing_inter_intro. * eapply typing_abs. intros. cbn. apply typing_merge1. apply typing_union_intro1. eapply typing_var. apply M.add_1.

  • auto. reflexivity. constructor. econstructor. intros. cbn. constructor.

* eapply typing_abs. intros. cbn. apply typing_merge2. eapply typing_app.

  • apply typing_inter_intro.

++ eapply typing_abs. intros. cbn. apply typing_merge1. ++ eapply typing_abs. intros. cbn. apply typing_merge2. ** apply typing_merge1. eapply typing_var. apply M.add_2. ** apply typing_merge2. eapply typing_var. apply M.add_1. ** constructor.

  • eapply typing_inter_elim2. eapply typing_var. apply M.add_2.
  • - constructor.

+ eapply typing_inter_elim1. eapply typing_var. apply M.add_1. auto.

slide-8
SLIDE 8
  • eapply typing_abs. intros. cbn. eapply typing_app. apply typing_union_elim.

+ apply typing_inter_intro. * eapply typing_abs. intros. cbn. apply typing_merge1. apply typing_union_intro1. eapply typing_var. apply M.add_1.

  • auto. reflexivity. constructor. econstructor. intros. cbn. constructor.

* eapply typing_abs. intros. cbn. apply typing_merge2. eapply typing_app.

  • apply typing_inter_intro.

++ eapply typing_abs. intros. cbn. apply typing_merge1. ++ eapply typing_abs. intros. cbn. apply typing_merge2. ** apply typing_merge1. eapply typing_var. apply M.add_2. ** apply typing_merge2. eapply typing_var. apply M.add_1. ** constructor.

  • eapply typing_inter_elim2. eapply typing_var. apply M.add_2.
  • - constructor.

+ eapply typing_inter_elim1. eapply typing_var. apply M.add_1. auto. easy to read easy to step through

slide-9
SLIDE 9
  • eapply typing_abs. intros. cbn. eapply typing_app. apply typing_union_elim.

+ apply typing_inter_intro. * eapply typing_abs. intros. cbn. apply typing_merge1. apply typing_union_intro1. eapply typing_var. apply M.add_1.

  • auto. reflexivity. constructor. econstructor. intros. cbn. constructor.

* eapply typing_abs. intros. cbn. apply typing_merge2. eapply typing_app.

  • apply typing_inter_intro.

++ eapply typing_abs. intros. cbn. apply typing_merge1. ++ eapply typing_abs. intros. cbn. apply typing_merge2. ** apply typing_merge1. eapply typing_var. apply M.add_2. ** apply typing_merge2. eapply typing_var. apply M.add_1. ** constructor.

  • eapply typing_inter_elim2. eapply typing_var. apply M.add_2.
  • - constructor.

+ eapply typing_inter_elim1. eapply typing_var. apply M.add_1. auto. tedious to write tedious to maintain

slide-10
SLIDE 10
  • eapply typing_abs. intros. cbn. eapply typing_app. apply typing_union_elim.

+ apply typing_inter_intro. * eapply typing_abs. intros. cbn. apply typing_merge1. apply typing_union_intro1. eapply typing_var. apply M.add_1.

  • auto. reflexivity. constructor. econstructor. intros. cbn. constructor.

* eapply typing_abs. intros. cbn. apply typing_merge2. eapply typing_app.

  • apply typing_inter_intro.

++ eapply typing_abs. intros. cbn. apply typing_merge1. ++ eapply typing_abs. intros. cbn. apply typing_merge2. ** apply typing_merge1. eapply typing_var. apply M.add_2. ** apply typing_merge2. eapply typing_var. apply M.add_1. ** constructor.

  • eapply typing_inter_elim2. eapply typing_var. apply M.add_2.
  • - constructor.

+ eapply typing_inter_elim1. eapply typing_var. apply M.add_1. auto.

slide-11
SLIDE 11

split ; induction T ; cbn in * ; auto ; unfold compare, ge, flip in *. firstorder ; (rewrite tree_forall_occurs in H, H1 ; [| apply le_q_compatible | apply ge_eq_compatible]) ; [rewrite H0, H4 | rewrite H | rewrite H1] ; try destruct leb ; auto. firstorder ; destruct (compare_spec t0 n) ; auto ; destruct H6 ; rewrite H6 in [case_eq (leb n t0) | case_eq (leb t0 n)] ; intro ; try contradiction ; rewrite H8 in H0 ; firstorder.

slide-12
SLIDE 12

split ; induction T ; cbn in * ; auto ; unfold compare, ge, flip in *. firstorder ; (rewrite tree_forall_occurs in H, H1 ; [| apply le_q_compatible | apply ge_eq_compatible]) ; [rewrite H0, H4 | rewrite H | rewrite H1] ; try destruct leb ; auto. firstorder ; destruct (compare_spec t0 n) ; auto ; destruct H6 ; rewrite H6 in [case_eq (leb n t0) | case_eq (leb t0 n)] ; intro ; try contradiction ; rewrite H8 in H0 ; firstorder. short to write less maintenance effort

slide-13
SLIDE 13

split ; induction T ; cbn in * ; auto ; unfold compare, ge, flip in *. firstorder ; (rewrite tree_forall_occurs in H, H1 ; [| apply le_q_compatible | apply ge_eq_compatible]) ; [rewrite H0, H4 | rewrite H | rewrite H1] ; try destruct leb ; auto. firstorder ; destruct (compare_spec t0 n) ; auto ; destruct H6 ; rewrite H6 in [case_eq (leb n t0) | case_eq (leb t0 n)] ; intro ; try contradiction ; rewrite H8 in H0 ; firstorder. short to write less maintenance effort difficult to write

slide-14
SLIDE 14

split ; induction T ; cbn in * ; auto ; unfold compare, ge, flip in *. firstorder ; (rewrite tree_forall_occurs in H, H1 ; [| apply le_q_compatible | apply ge_eq_compatible]) ; [rewrite H0, H4 | rewrite H | rewrite H1] ; try destruct leb ; auto. firstorder ; destruct (compare_spec t0 n) ; auto ; destruct H6 ; rewrite H6 in [case_eq (leb n t0) | case_eq (leb t0 n)] ; intro ; try contradiction ; rewrite H8 in H0 ; firstorder. short to write less maintenance effort difficult to write

slide-15
SLIDE 15

split ; induction T ; cbn in * ; auto ; unfold compare, ge, flip in *. firstorder ; (rewrite tree_forall_occurs in H, H1 ; [| apply le_q_compatible | apply ge_eq_compatible]) ; [rewrite H0, H4 | rewrite H | rewrite H1] ; try destruct leb ; auto. firstorder ; destruct (compare_spec t0 n) ; auto ; destruct H6 ; rewrite H6 in [case_eq (leb n t0) | case_eq (leb t0 n)] ; intro ; try contradiction ; rewrite H8 in H0 ; firstorder. short to write less maintenance effort difficult to write difficult to read

slide-16
SLIDE 16

have [-> | nzU] := eqVneq U 0%VS. by right=> [[e []]]; rewrite memv0 => ->. pose X := vbasis U; pose feq f1 f2 := [tuple of map f1 X ++ map f2 X]. have feqL f i: tnth (feq _ f _) (lshift _ i) = f X‘_i. set v := f _; rewrite (tnth_nth v) /= nth_cat size_map size_tuple. by rewrite ltn_ord (nth_map 0) ?size_tuple. apply: (iffP (vsolve_eqP _ _ _)) => [[e Ue id_e] | [e [Ue _ id_e]]]. suffices idUe: in U, forall u, e * u = u /\ u * e = u. exists e; split=> //; apply: contraNneq nzU => e0; rewrite -subv0. by apply/subvP=> u /idUe[<- _]; rewrite e0 mul0r mem0v. move=> u /coord_vbasis->; rewrite mulr_sumr mulr_suml. have: (\dim (A * M) - \dim (sumA X) < k.+1)%N by []. have: [/\ (sumA X <= A * M)%VS, directv (sumA X) & 0 \notin X]. split; apply/eq_bigr=> i _; rewrite -(scalerAr, scalerAl); congr (_ *: _). by have:= id_e (lshift _ i); rewrite lfunE. by have:= id_e (rshift _ i); rewrite lfunE.

slide-17
SLIDE 17

have [-> | nzU] := eqVneq U 0%VS. by right=> [[e []]]; rewrite memv0 => ->. pose X := vbasis U; pose feq f1 f2 := [tuple of map f1 X ++ map f2 X]. have feqL f i: tnth (feq _ f _) (lshift _ i) = f X‘_i. set v := f _; rewrite (tnth_nth v) /= nth_cat size_map size_tuple. by rewrite ltn_ord (nth_map 0) ?size_tuple. apply: (iffP (vsolve_eqP _ _ _)) => [[e Ue id_e] | [e [Ue _ id_e]]]. suffices idUe: in U, forall u, e * u = u /\ u * e = u. exists e; split=> //; apply: contraNneq nzU => e0; rewrite -subv0. by apply/subvP=> u /idUe[<- _]; rewrite e0 mul0r mem0v. move=> u /coord_vbasis->; rewrite mulr_sumr mulr_suml. have: (\dim (A * M) - \dim (sumA X) < k.+1)%N by []. have: [/\ (sumA X <= A * M)%VS, directv (sumA X) & 0 \notin X]. split; apply/eq_bigr=> i _; rewrite -(scalerAr, scalerAl); congr (_ *: _). by have:= id_e (lshift _ i); rewrite lfunE. by have:= id_e (rshift _ i); rewrite lfunE. compact and independently readable in principle

slide-18
SLIDE 18

have [-> | nzU] := eqVneq U 0%VS. by right=> [[e []]]; rewrite memv0 => ->. pose X := vbasis U; pose feq f1 f2 := [tuple of map f1 X ++ map f2 X]. have feqL f i: tnth (feq _ f _) (lshift _ i) = f X‘_i. set v := f _; rewrite (tnth_nth v) /= nth_cat size_map size_tuple. by rewrite ltn_ord (nth_map 0) ?size_tuple. apply: (iffP (vsolve_eqP _ _ _)) => [[e Ue id_e] | [e [Ue _ id_e]]]. suffices idUe: in U, forall u, e * u = u /\ u * e = u. exists e; split=> //; apply: contraNneq nzU => e0; rewrite -subv0. by apply/subvP=> u /idUe[<- _]; rewrite e0 mul0r mem0v. move=> u /coord_vbasis->; rewrite mulr_sumr mulr_suml. have: (\dim (A * M) - \dim (sumA X) < k.+1)%N by []. have: [/\ (sumA X <= A * M)%VS, directv (sumA X) & 0 \notin X]. split; apply/eq_bigr=> i _; rewrite -(scalerAr, scalerAl); congr (_ *: _). by have:= id_e (lshift _ i); rewrite lfunE. by have:= id_e (rshift _ i); rewrite lfunE. difficult to read in practice, unsuitable for large proof states

slide-19
SLIDE 19

tauto.

  • mega.

ring.

slide-20
SLIDE 20

tauto.

  • mega.

ring. generally pretty great

slide-21
SLIDE 21

tauto.

  • mega.

ring. generally pretty great

  • nly operate in a specific domain
slide-22
SLIDE 22

firstorder. hammer. search.

slide-23
SLIDE 23

firstorder. hammer. search. you don’t have to do anything

slide-24
SLIDE 24

firstorder. hammer. search. you don’t have to do anything you will be doing nothing for a long time

slide-25
SLIDE 25

induction x; auto.

slide-26
SLIDE 26

induction x; auto.

One or two crucial proof steps, followed by human-guided automation.

slide-27
SLIDE 27

induction x; auto.

One or two crucial proof steps, followed by human-guided automation.

⊲ Abandons the panacea of a “readable” proof ⊲ Instead, encodes all knowledge into lemmas

slide-28
SLIDE 28

induction x; auto.

One or two crucial proof steps, followed by human-guided automation.

⊲ Abandons the panacea of a “readable” proof ⊲ Instead, encodes all knowledge into lemmas ⊲ Plus heuristics on how and when to use lemmas

slide-29
SLIDE 29

induction x; auto.

One or two crucial proof steps, followed by human-guided automation.

⊲ Abandons the panacea of a “readable” proof ⊲ Instead, encodes all knowledge into lemmas ⊲ Plus heuristics on how and when to use lemmas

(which may also be unreadable)

slide-30
SLIDE 30

What is auto?

(and how does it differ from any other automation styles)

slide-31
SLIDE 31

What is auto?

(and how does it differ from any other automation styles)

Simple, general purpose BFS/DFS proof search based on user-hints.

slide-32
SLIDE 32

What is auto?

(and how does it differ from any other automation styles)

Simple, general purpose BFS/DFS proof search based on user-hints. Lemma le_S : ∀xy, x < y → x + 1 < x + 1 .

  • Proof. ... Qed.
slide-33
SLIDE 33

What is auto?

(and how does it differ from any other automation styles)

Simple, general purpose BFS/DFS proof search based on user-hints. Lemma le_S : ∀xy, x < y → x + 1 < x + 1 .

  • Proof. ... Qed.

Hint Rewrite le_S.

slide-34
SLIDE 34

What is auto?

(and how does it differ from any other automation styles)

Simple, general purpose BFS/DFS proof search based on user-hints. Lemma le_S : ∀xy, x < y → x + 1 < x + 1 .

  • Proof. ... Qed.

Hint Rewrite le_S. Proof State:

w z +1 < k ∗a +1

slide-35
SLIDE 35

What is auto?

(and how does it differ from any other automation styles)

Simple, general purpose BFS/DFS proof search based on user-hints. Lemma le_S : ∀xy, x < y → x + 1 < x + 1 .

  • Proof. ... Qed.

Hint Rewrite le_S. Proof State:

w z +1 < k ∗a +1

slide-36
SLIDE 36

What is auto?

(and how does it differ from any other automation styles)

Simple, general purpose BFS/DFS proof search based on user-hints. Lemma le_S : ∀xy, x < y → x + 1 < x + 1 .

  • Proof. ... Qed.

Hint Rewrite le_S. Proof State:

w z < k ∗a

slide-37
SLIDE 37

What is auto?

(and how does it differ from any other automation styles)

Simple, general purpose BFS/DFS proof search based on user-hints.

slide-38
SLIDE 38

What is auto?

(and how does it differ from any other automation styles)

Simple, general purpose BFS/DFS proof search based on user-hints. Lemma plus_comm : ∀xy, x + y = y + x .

  • Proof. ... Qed.
slide-39
SLIDE 39

What is auto?

(and how does it differ from any other automation styles)

Simple, general purpose BFS/DFS proof search based on user-hints. Lemma plus_comm : ∀xy, x + y = y + x .

  • Proof. ... Qed.

Hint Rewrite plus_comm.

slide-40
SLIDE 40

What is auto?

(and how does it differ from any other automation styles)

Simple, general purpose BFS/DFS proof search based on user-hints. Lemma plus_comm : ∀xy, x + y = y + x .

  • Proof. ... Qed.

Hint Rewrite plus_comm. Proof State:

w p +z = k

slide-41
SLIDE 41

What is auto?

(and how does it differ from any other automation styles)

Simple, general purpose BFS/DFS proof search based on user-hints. Lemma plus_comm : ∀xy, x + y = y + x .

  • Proof. ... Qed.

Hint Rewrite plus_comm. Proof State:

w p +z = k

slide-42
SLIDE 42

What is auto?

(and how does it differ from any other automation styles)

Simple, general purpose BFS/DFS proof search based on user-hints. Lemma plus_comm : ∀xy, x + y = y + x .

  • Proof. ... Qed.

Hint Rewrite plus_comm. Proof State: z + w

p = k

slide-43
SLIDE 43

What is auto?

(and how does it differ from any other automation styles)

Simple, general purpose BFS/DFS proof search based on user-hints.

slide-44
SLIDE 44

What is auto?

(and how does it differ from any other automation styles)

Simple, general purpose BFS/DFS proof search based on user-hints. Hint Extern => tactic_expr

slide-45
SLIDE 45

What is auto?

(and how does it differ from any other automation styles)

Simple, general purpose BFS/DFS proof search based on user-hints. Gating Hint Extern => match goal with | gate_expr => apply lemma | _ => fail end

slide-46
SLIDE 46

What is auto?

(and how does it differ from any other automation styles)

Simple, general purpose BFS/DFS proof search based on user-hints. Gating Lemma le_trans : ∀xyz,x < y → y < z → x < z Proof. ... Qed.

slide-47
SLIDE 47

What is auto?

(and how does it differ from any other automation styles)

Simple, general purpose BFS/DFS proof search based on user-hints. Gating Lemma le_trans : ∀xyz,x < y → y < z → x < z Proof. ... Qed. Hint Apply le_trans.

slide-48
SLIDE 48

What is auto?

(and how does it differ from any other automation styles)

Simple, general purpose BFS/DFS proof search based on user-hints. Gating Lemma le_trans : ∀xyz,x < y → y < z → x < z Proof. ... Qed. Hint Apply le_trans.

slide-49
SLIDE 49

What is auto?

(and how does it differ from any other automation styles)

Simple, general purpose BFS/DFS proof search based on user-hints. Gating Lemma le_trans : ∀xyz,x < y → y < z → x < z Proof. ... Qed. Hint Extern => match goal with | H1 : ?x < ?y , H2 : ?y < ?z |- ?x < ?z => apply le_trans H1 H1 | _ => fail end

slide-50
SLIDE 50

What is auto?

(and how does it differ from any other automation styles)

Simple, general purpose BFS/DFS proof search based on user-hints. Gating Lemma le_trans : ∀xyz,x < y → y < z → x < z Proof. ... Qed. Hint Extern => match goal with | H1 : ?x < ?y , H2 : ?y < ?z |- ?x < ?z => apply le_trans H1 H1 | _ => fail end

slide-51
SLIDE 51

What is auto?

(and how does it differ from any other automation styles)

Simple, general purpose BFS/DFS proof search based on user-hints. Gating Lemma le_trans : ∀xyz,x < y → y < z → x < z Proof. ... Qed. Hint Extern => match goal with | H1 : ?x < ?y , H2 : ?y < ?z |- ?x < ?z => apply le_trans H1 H1 | _ => fail end

slide-52
SLIDE 52

What is auto?

(and how does it differ from any other automation styles)

Simple, general purpose BFS/DFS proof search based on user-hints. Gating Lemma le_trans : ∀xyz,x < y → y < z → x < z Proof. ... Qed. Hint Extern => match goal with | H1 : ?x < ?y , H2 : ?y < ?z |- ?x < ?z => apply le_trans H1 H1 | _ => fail end

slide-53
SLIDE 53

What is auto?

(and how does it differ from any other automation styles)

Simple, general purpose BFS/DFS proof search based on user-hints. Gating Lemma le_trans : ∀xyz,x < y → y < z → x < z Proof. ... Qed. Hint Extern => match goal with | H1 : ?x < ?y , H2 : ?y < ?z |- ?x < ?z => apply le_trans H1 H1 | _ => fail end

slide-54
SLIDE 54

What is auto?

(and how does it differ from any other automation styles)

Simple, general purpose BFS/DFS proof search based on user-hints. Gating Lemma le_trans : ∀xyz,x < y → y < z → x < z Proof. ... Qed. Hint Extern => match goal with | H1 : ?x < ?y , H2 : ?y < ?z |- ?x < ?z => apply le_trans H1 H1 | _ => fail end

slide-55
SLIDE 55

Rule of thumb

Keep auto branching factor below 1.5

(Otherwise auto would just be a bad version of other automation tactics)

slide-56
SLIDE 56

Rule of thumb

Keep auto branching factor below 1.5

(Otherwise auto would just be a bad version of other automation tactics)

Practical experience

Branching factor < 10 easily achievable with gating Branching factor < 2 increasingly hard for complex developments

slide-57
SLIDE 57

Solution

Small-data online machine learning

slide-58
SLIDE 58

Solution

Small-data online machine learning

Record the successful hints executed by previous auto runs Γ1 ⊢ T1 ⇒ Hint Apply lemma ⇒ Γ2 ⊢ T2

slide-59
SLIDE 59

Solution

Small-data online machine learning

Record the successful hints executed by previous auto runs Γ1 ⊢ T1 ⇒ Hint Apply lemma ⇒ Γ2 ⊢ T2 Modify the auto tactic ⊲ On each branch point, execute all possible hints (expected +/- 10)

slide-60
SLIDE 60

Solution

Small-data online machine learning

Record the successful hints executed by previous auto runs Γ1 ⊢ T1 ⇒ Hint Apply lemma ⇒ Γ2 ⊢ T2 Modify the auto tactic ⊲ On each branch point, execute all possible hints (expected +/- 10) ⊲ Order them based on machine learning ⊲ Pray to the ML-gods that branching factor is now « 2

slide-61
SLIDE 61

Machine Learning

For each recorded triple Γ1 ⊢ T1 ⇒ Hint ... ⇒ Γ2 ⊢ T2

slide-62
SLIDE 62

Machine Learning

For each recorded triple Γ1 ⊢ T1 ⇒ Hint ... ⇒ Γ2 ⊢ T2 calculate Γ∆ ⊢ T∆ = Γ1 ⊢ T1 −Γ2 ⊢ T2

slide-63
SLIDE 63

Machine Learning

For each recorded triple Γ1 ⊢ T1 ⇒ Hint ... ⇒ Γ2 ⊢ T2 calculate Γ∆ ⊢ T∆ = Γ1 ⊢ T1 −Γ2 ⊢ T2 and execute a k-nearest neighbor on its features

slide-64
SLIDE 64

Machine Learning

For each recorded triple Γ1 ⊢ T1 ⇒ Hint ... ⇒ Γ2 ⊢ T2 calculate Γ∆ ⊢ T∆ = Γ1 ⊢ T1 −Γ2 ⊢ T2 and execute a k-nearest neighbor on its features Currently, subtraction is a pointwise textual diff for hypotheses and goal

slide-65
SLIDE 65

Integrated into experimental Tactician version

slide-66
SLIDE 66

Integrated into experimental Tactician version

The Tactician

⊲ ML on tactic scripts ⊲ Seamless integration into user workflow ⊲ Suitable for proving-in-the-large ⊲ Alpha version available ⊲ Version 1.0 expected soon

https://coq-tactician.github.io

slide-67
SLIDE 67

TODO

slide-68
SLIDE 68

TODO

⊲ Find a suitable large auto-focused development

slide-69
SLIDE 69

TODO

⊲ Find a suitable large auto-focused development ⊲ Perform an evaluation to convince skeptics...

Have an interesting development? Contact me!

slide-70
SLIDE 70

TODO

⊲ Find a suitable large auto-focused development ⊲ Perform an evaluation to convince skeptics...

Have an interesting development? Contact me!

⊲ Move to more symbolic-based machine learning

Have an interesting small-scale ML technique? Contact me!

slide-71
SLIDE 71

TODO

⊲ Find a suitable large auto-focused development ⊲ Perform an evaluation to convince skeptics...

Have an interesting development? Contact me!

⊲ Move to more symbolic-based machine learning

Have an interesting small-scale ML technique? Contact me!

?