{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/learning-differentiable-logic-programs-for","title":"Learning Differentiable Logic Programs for Abstract Visual Reasoning","arxiv_id":"2307.00928","date":"2023-07-03","proceeding":null,"authors":["Hikaru Shindo","Viktor Pfanschilling","Devendra Singh Dhami","Kristian Kersting"],"abstract":"Visual reasoning is essential for building intelligent agents that understand the world and perform problem-solving beyond perception. Differentiable forward reasoning has been developed to integrate reasoning with gradient-based machine learning paradigms. However, due to the memory intensity, most existing approaches do not bring the best of the expressivity of first-order logic, excluding a crucial ability to solve abstract visual reasoning, where agents need to perform reasoning by using analogies on abstract concepts in different scenarios. To overcome this problem, we propose NEUro-symbolic Message-pAssiNg reasoNer (NEUMANN), which is a graph-based differentiable forward reasoner, passing messages in a memory-efficient manner and handling structured programs with functors. Moreover, we propose a computationally-efficient structure learning algorithm to perform explanatory program induction on complex visual scenes. To evaluate, in addition to conventional visual reasoning tasks, we propose a new task, visual reasoning behind-the-scenes, where agents need to learn abstract programs and then answer queries by imagining scenes that are not observed. We empirically demonstrate that NEUMANN solves visual reasoning tasks efficiently, outperforming neural, symbolic, and neuro-symbolic baselines.","url_abs":"https://arxiv.org/abs/2307.00928v1","url_pdf":"https://arxiv.org/pdf/2307.00928v1.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"learning-differentiable-logic-programs-for","repo_url":"https://github.com/ml-research/neumann","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"program-induction","task_name":"Program induction"},{"task_slug":"visual-reasoning","task_name":"Visual Reasoning"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2307.00928","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2307.00928"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/ml-research/neumann","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"unverified":12},"by_repo_kind":{"official":{"samples":12,"ran":0,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"69f54a31e6f166af","entry":"get_target_maps","repo":"ml-research/neumann","repo_kind":"official","path":"src/explanation_utils.py","file_url":"https://github.com/ml-research/neumann/blob/HEAD/src/explanation_utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"69f54a31e6f166af"}},{"code_sha256_prefix":"db89ca1b27aced79","entry":"letterbox","repo":"ml-research/neumann","repo_kind":"official","path":"src/data_kandinsky.py","file_url":"https://github.com/ml-research/neumann/blob/HEAD/src/data_kandinsky.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"db89ca1b27aced79"}},{"code_sha256_prefix":"31cd0d76f84177bf","entry":"load_image_clevr","repo":"ml-research/neumann","repo_kind":"official","path":"src/data_behind_the_scenes.py","file_url":"https://github.com/ml-research/neumann/blob/HEAD/src/data_behind_the_scenes.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"31cd0d76f84177bf"}},{"code_sha256_prefix":"b8300d8a62602ce8","entry":"load_image_yolo","repo":"ml-research/neumann","repo_kind":"official","path":"src/data_kandinsky.py","file_url":"https://github.com/ml-research/neumann/blob/HEAD/src/data_kandinsky.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b8300d8a62602ce8"}},{"code_sha256_prefix":"82354e6e5a5c7b89","entry":"load_images_and_labels","repo":"ml-research/neumann","repo_kind":"official","path":"src/data_clevr.py","file_url":"https://github.com/ml-research/neumann/blob/HEAD/src/data_clevr.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"82354e6e5a5c7b89"}},{"code_sha256_prefix":"0dac6d106821f31b","entry":"load_images_and_labels","repo":"ml-research/neumann","repo_kind":"official","path":"src/data_kandinsky.py","file_url":"https://github.com/ml-research/neumann/blob/HEAD/src/data_kandinsky.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"0dac6d106821f31b"}},{"code_sha256_prefix":"8117fb788ddb9093","entry":"load_images_and_labels","repo":"ml-research/neumann","repo_kind":"official","path":"src/data_vilp.py","file_url":"https://github.com/ml-research/neumann/blob/HEAD/src/data_vilp.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"8117fb788ddb9093"}},{"code_sha256_prefix":"0b69500fd308ee7e","entry":"load_images_and_labels_positive","repo":"ml-research/neumann","repo_kind":"official","path":"src/data_vilp.py","file_url":"https://github.com/ml-research/neumann/blob/HEAD/src/data_vilp.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"0b69500fd308ee7e"}},{"code_sha256_prefix":"1bd6bc221874e4c9","entry":"load_question_json","repo":"ml-research/neumann","repo_kind":"official","path":"src/data_behind_the_scenes.py","file_url":"https://github.com/ml-research/neumann/blob/HEAD/src/data_behind_the_scenes.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"1bd6bc221874e4c9"}},{"code_sha256_prefix":"a2b8ea7cda7a980e","entry":"to_one_label","repo":"ml-research/neumann","repo_kind":"official","path":"src/explain_clevr.py","file_url":"https://github.com/ml-research/neumann/blob/HEAD/src/explain_clevr.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"a2b8ea7cda7a980e"}},{"code_sha256_prefix":"c3b79d296ee7933e","entry":"valuation_to_attr_string","repo":"ml-research/neumann","repo_kind":"official","path":"src/explanation_utils.py","file_url":"https://github.com/ml-research/neumann/blob/HEAD/src/explanation_utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"c3b79d296ee7933e"}},{"code_sha256_prefix":"f0680d163806a4d7","entry":"valuation_to_rel_string","repo":"ml-research/neumann","repo_kind":"official","path":"src/explanation_utils.py","file_url":"https://github.com/ml-research/neumann/blob/HEAD/src/explanation_utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"f0680d163806a4d7"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}