Johannes Kanig

dblp:70/225 · DBLP profile ↗
← Back
3ranked-venue papers
0as first author
1since 2021 · last 2025
—ORCID · none

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 2 · 1 since 2021Artificial intelligence and machine learning · 1Theory of computation · 1

Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.

Software engineering, system software, and programming languages
1 paper
Program verification · 70% Programming languages and type systems · 30%

Topics — the 4 heaviest of 4, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Program verification
deductive verification
0.412020
Recursive Data Structures in SPARK · CAV (2) 2020
Programming languages and type systems › type systems
ownership types
0.412020
Recursive Data Structures in SPARK · CAV (2) 2020
Program verification
pointer program verification
0.412020
Recursive Data Structures in SPARK · CAV (2) 2020
Program verification
contract verification
0.112020
Recursive Data Structures in SPARK · CAV (2) 2020

Methods — techniques the papers use, named apart from their topics

pledges · 0.4ownership policy · 0.4local borrowing · 0.4
YearPublicationVenuePosition
2025 Two-Way Collaboration Between Flow and Proof in SPARK
Claire Dross, Joffrey Huguet, Johannes Kanig
VMCAI (1)3
2020 Recursive Data Structures in SPARK
abstract
SPARK is both a deductive verification tool for the Ada language and the subset of Ada on which it operates. In this paper, we present a recent extension of the SPARK language and toolset to support pointers. This extension is based on an ownership policy inspired by Rust to enforce non-aliasing through a move semantics of assignment. In particular, we consider pointer-based recursive data structures, and discuss how they are supported in SPARK. We explain how iteration over these structures can be handled using a restricted form of aliasing called local borrowing. To avoid introducing a memory model and to stay in the first-order logic background of SPARK, the relation between the iterator and the underlying structure is encoded as a predicate which is maintained throughout the program control flow. Special first-order contracts, called pledges, can be used to describe this relation. Finally, we give examples of programs that can be verified using this framework.
Claire Dross, Johannes Kanig
CAV (2)2
2016 Adding Decision Procedures to SMT Solvers Using Axioms with Triggers
Claire Dross, Sylvain Conchon, Johannes Kanig, Andrei Paskevich
J. Autom. Reason.3